feat(interface): 完成队列式记忆模块更新

This commit is contained in:
2026-01-06 20:32:27 +08:00
parent ca7ef92b05
commit 47c14e520b
6 changed files with 32 additions and 15 deletions

View File

@@ -1,6 +1,7 @@
"""队列式记忆工作界面"""
from enum import Enum, auto
from typing import Callable
from textual.app import ComposeResult
from textual.containers import Center, ScrollableContainer
@@ -42,15 +43,18 @@ class MemScreen(Screen):
def __init__(
self,
phaser: Phaser,
save_func: Callable,
name=None,
id=None,
classes=None,
) -> None:
super().__init__(name, id, classes)
self.phaser = phaser
self.save_func = save_func
self.update_state()
self.fission: Fission
def compose(self) -> ComposeResult:
yield Header(show_clock=True)
with ScrollableContainer():
@@ -125,8 +129,9 @@ class MemScreen(Screen):
for i in container.children:
i.remove()
from heurams.interface.widgets.finished import Finished
container.mount(Finished())
if config_var.get().get("persist_to_file", 0):
self.save_func()
container.mount(Finished(is_saved=config_var.get().get("persist_to_file", 0)))
def on_button_pressed(self, event):
event.stop()
@@ -173,8 +178,21 @@ class MemScreen(Screen):
self.mount_puzzle()
self.update_display()
def atom_reporter(self, quality):
if not self.atom.registry["runtime"]["locked"]:
if not self.atom.registry["electron"].is_activated():
self.atom.registry["electron"].activate()
logger.debug(f"激活原子 {self.atom}")
self.atom.lock(1)
self.atom.minimize(5)
else:
self.atom.minimize(quality)
else:
pass
def forward_atom(self, quality):
logger.debug(f"Quality: {quality}")
self.atom_reporter(quality)
if quality <= 3:
self.procession.append()
self.update_state() # 刷新状态

View File

@@ -130,8 +130,10 @@ class PreparationScreen(Screen):
import heurams.kernel.reactor as rt
pheser = rt.Phaser(atoms_to_provide)
memscreen = MemScreen(pheser)
save_func = self.repo.persist_to_repodir
memscreen = MemScreen(pheser, save_func)
self.app.push_screen(memscreen)
elif event.button.id == "precache_button":
self.action_precache()

View File

@@ -7,6 +7,7 @@ class Finished(Widget):
self,
*children: Widget,
alia="",
is_saved = 0,
name: str | None = None,
id: str | None = None,
classes: str | None = None,
@@ -14,6 +15,7 @@ class Finished(Widget):
markup: bool = True
) -> None:
self.alia = alia
self.is_saved = is_saved
super().__init__(
*children,
name=name,
@@ -25,6 +27,7 @@ class Finished(Widget):
def compose(self):
yield Label("本次记忆进程结束", id="finished_msg")
yield Label(f"算法数据{'已保存' if self.is_saved else "未能保存"}")
yield Button("返回上一级", id="back-to-menu")
def on_button_pressed(self, event):

View File

@@ -107,13 +107,3 @@ class Recognition(BasePuzzleWidget):
if event.button.id == "ok":
self.screen.rating = 5 # type: ignore
self.handler(5)
def handler(self, rating):
if not self.atom.registry["runtime"]["locked"]:
if not self.atom.registry["electron"].is_activated():
self.atom.registry["electron"].activate()
logger.debug(f"激活原子 {self.atom}")
self.atom.lock(1)
self.atom.minimize(5)
else:
pass

View File

@@ -16,6 +16,7 @@ class Phaser(Machine):
def __init__(self, atoms: list[pt.Atom]) -> None:
logger.debug("Phaser.__init__: 原子数量=%d", len(atoms))
self.atoms = atoms
new_atoms = list()
old_atoms = list()
@@ -105,6 +106,9 @@ class Phaser(Machine):
def on_finished(self):
"""进入FINISHED状态时的回调"""
for i in self.atoms:
i.lock(1)
i.revise()
logger.debug("Phaser 进入 FINISHED 状态")
def current_procession(self):

View File

@@ -101,7 +101,7 @@ class Repo:
source = self.source
if source == None:
raise FileNotFoundError("不存在仓库到文件的映射")
source.mkdir(parents=True, exist_ok=False)
source.mkdir(parents=True, exist_ok=True)
for keyname in save_list:
filename = self.file_mapping[keyname]
with open(source / filename, "w") as f:
@@ -112,7 +112,7 @@ class Repo:
if filename.endswith("toml"):
toml.dump(dict_data, f)
elif filename.endswith("json"):
json.dump(dict_data, f)
json.dump(dict_data, f, ensure_ascii=False, indent=4)
else:
raise ValueError(f"不支持的文件类型: {filename}")