逻辑改进

This commit is contained in:
2025-08-04 01:24:35 +08:00
parent 4beb42f615
commit c9185fbd0a
6 changed files with 504 additions and 177 deletions

63
main.py
View File

@@ -1,12 +1,11 @@
from textual.app import App, ComposeResult
from textual.widgets import Header, Footer, ListView, DirectoryTree, ListItem, Label, Static, Button
from textual.containers import Container, Horizontal
from textual.widgets import Header, Footer, ListView, ProgressBar, DirectoryTree, ListItem, Label, Static, Button
from textual.containers import Container, Horizontal, Center
from textual.screen import Screen
import pathlib
import threading
import edge_tts as tts
from playsound import playsound
from textual.logging import TextualHandler
import particles as pt
from reactor import Reactor, Apparatus
@@ -46,17 +45,19 @@ class MemScreen(Screen):
self.reactor = Reactor(nucleon_file, electron_file, self, tasked_num)
self.stage = 1
self.stage += self.reactor.set_round_templated(self.stage)
#print(self.reactor.procession)
##print(self.reactor.procession)
self.reactor.forward()
#self.compo:compo.Composition = compo.Placeholder(self)
self.compo = next(self.reactor.current_appar)
def compose(self) -> ComposeResult:
print(self.compo)
#print(self.compo)
yield Header(show_clock=True)
with Container(id="main_container"):
yield from self.compo.compose()
with Center():
yield Static(f"{len(self.reactor.procession) - self.reactor.index}/{len(self.reactor.procession)}")
#yield ProgressBar(total=len(self.reactor.procession) - 1, show_percentage=False, show_eta=False, id="progress")
yield from self.compo.compose()
yield Footer()
"""
@@ -69,27 +70,23 @@ class MemScreen(Screen):
pass
def on_button_pressed(self, event):
ret = self.compo.handler(event)
"""feedback_label = self.query_one("#feedback", Static)
if type(event) == str:
btnid = event
else:
btnid = event.button.id
btnid = str(btnid)
quality = int(btnid.replace('q', ''))
assessment = self.reactor.report(self.reactor.current_atom, quality)
"""
# 遵循 perror 返回值规则
ret = self.compo.handler(event, "button")
self._forward_judge(ret)
def _forward_judge(self, ret):
if ret == -1:
return
if ret == 0: # 成功
try:
self.compo = next(self.reactor.current_appar)
self.refresh_ui()
except StopIteration:
nxt = self.reactor.forward(1)
print(2)
self.compo = next(self.reactor.current_appar)
print(self.compo)
#print("next", nxt, self.reactor.current_atom)
#print(2)
try:
self.compo = next(self.reactor.current_appar)
except:
pass
if nxt == -1:
if self.reactor.round_set == 0:
if self.stage == 4:
@@ -101,6 +98,8 @@ class MemScreen(Screen):
self.reactor.forward(1)
#self._update_ui()
self.stage += 1
self.compo = next(self.reactor.current_appar)
self.refresh_ui()
return
return
else:
@@ -109,14 +108,14 @@ class MemScreen(Screen):
if ret == 1: # 不允许前进
self.refresh_ui()
return
def refresh_ui(self):
area = self.query_one("#main_container")
self.call_later(self.recompose)
#print(area.children)
#self.call_later(lambda: self.query_one("#progress", expect_type=ProgressBar).advance(self.reactor.index))
##print(area.children)
#for child in list(area.children):
# child.remove() # 致敬传奇组件树 DOM
#print(1,list(self.compo.compose()))
##print(1,list(self.compo.compose()))
#area.mount(*list(self.compo.compose()))
def report(self, quality):
@@ -143,17 +142,17 @@ class MemScreen(Screen):
#feedback_label.update("") # 清除反馈消息
self._update_ui()"""
def action_press(self, btnid):
self.on_button_pressed(btnid)
#def action_press(self, btnid):
# self.on_button_pressed(btnid)
def action_play_voice(self):
def play():
cache_dir = pathlib.Path(f"./cache/voice/")
cache_dir.mkdir(parents = True, exist_ok = True)
cache = cache_dir / f"{self.reactor.current_atom[1].content}.wav"
cache = cache_dir / f"{self.reactor.current_atom[1].content.replace("/","")}.wav"
if not cache.exists():
communicate = tts.Communicate(self.reactor.current_atom[1].content, "zh-CN-YunjianNeural")
communicate.save_sync(f"./cache/voice/{self.reactor.current_atom[1].content}.wav")
communicate = tts.Communicate(self.reactor.current_atom[1].content.replace("/",""), "zh-CN-YunjianNeural")
communicate.save_sync(f"./cache/voice/{self.reactor.current_atom[1].content.replace("/","")}.wav")
playsound(str(cache))
threading.Thread(target=play).start()
@@ -267,7 +266,7 @@ class AppLauncher(App):
}
def on_mount(self) -> None:
self.action_toggle_dark()
#self.action_toggle_dark()
self.push_screen("file_selection_screen")
if __name__ == "__main__":