增加再学习机制和状态反馈

This commit is contained in:
2025-10-01 12:59:41 +08:00
parent acfd179435
commit cb062788a7
2 changed files with 34 additions and 13 deletions

View File

@@ -29,6 +29,7 @@ class Composition:
screen: Screen,
reactor,
atom: Tuple[pt.Electron, pt.Nucleon, Dict] = pt.Atom.placeholder(),
extra = {}
):
self.screen = screen
self.atom = atom
@@ -58,7 +59,7 @@ class Composition:
class Finished(Composition):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict]):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra = {}):
super().__init__(screen, reactor, atom)
def compose(self):
@@ -66,7 +67,7 @@ class Finished(Composition):
class Placeholder(Composition):
def __init__(self, screen: Screen):
def __init__(self, screen: Screen, extra = {}):
self.screen = screen
def compose(self):
@@ -78,7 +79,7 @@ class Placeholder(Composition):
class Recognition(Composition):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict]):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra = {}):
super().__init__(screen, reactor, atom)
def compose(self):
@@ -130,7 +131,7 @@ class Recognition(Composition):
class BasicEvaluation(Composition):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict]):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra = {}):
super().__init__(screen, reactor, atom)
def compose(self):
@@ -167,8 +168,9 @@ class BasicEvaluation(Composition):
class FillBlank(Composition):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict]):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra:Dict = {}):
super().__init__(screen, reactor, atom)
self.extra = extra
self.inputlist = []
self.hashtable = {}
self._work()
@@ -180,6 +182,8 @@ class FillBlank(Composition):
random.shuffle(self.ans)
def compose(self):
if self.extra.get("feedback_msg"):
yield Label("反馈提示:" + self.extra["feedback_msg"])
yield Label(self.puzzle.wording, id=self.regid("sentence"))
yield Label(f"当前输入: {self.inputlist}", id=self.regid("inputpreview"))
for i in self.ans:
@@ -206,11 +210,11 @@ class FillBlank(Composition):
else:
self.inputlist = []
self.reactor.report(self.atom, 2)
return 1
return 2
class DrawCard(Composition):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict]):
def __init__(self, screen: Screen, reactor, atom: Tuple[pt.Electron, pt.Nucleon, Dict], extra = {}):
super().__init__(screen, reactor, atom)
self.inputlist = []
self.hashtable = {}
@@ -247,7 +251,7 @@ class DrawCard(Composition):
else:
self.inputlist = []
self.reactor.report(self.atom, 2)
return 1
return 2
registry = {

View File

@@ -56,6 +56,11 @@ class MemScreen(Screen):
print(self.reactor.forward())
#self._forward_judge(first_forward)
self.compo = next(self.reactor.current_appar)
self.feedback_state = 0 # 默认状态
self.feedback_state_map = {
0: "",
255: "回答有误, 请重试. 或者重新学习此单元",
}
def compose(self) -> ComposeResult:
if type(self.compo).__name__ == "Recognition":
@@ -63,19 +68,27 @@ class MemScreen(Screen):
yield Header(show_clock=True)
with Center():
yield Static(
f"{len(self.reactor.procession) - self.reactor.index}/{len(self.reactor.procession)}"
f"当前进度: {len(self.reactor.procession) - self.reactor.index}/{len(self.reactor.procession)}"
)
yield Label(self.feedback_state_map[self.feedback_state])
yield from self.compo.compose()
if self.feedback_state == 255:
yield Button("重新学习此单元", id="re-recognize", variant="warning")
yield Footer()
def on_mount(self):
pass
def on_button_pressed(self, event):
try:
if event.button.id == "re-recognize":
return
except:
pass
ret = self.compo.handler(event, "button")
self._forward_judge(ret)
def _forward_judge(self, ret):
self.feedback_state = 0
if ret == -1:
return
if ret == 0:
@@ -108,7 +121,11 @@ class MemScreen(Screen):
else:
self.refresh_ui()
return
if ret == 1:
if ret >= 1:
if ret == 2:
self.feedback_state = 255 # 表示错误
else:
self.feedback_state = 0
self.refresh_ui()
return
@@ -234,12 +251,12 @@ class DashboardScreen(Screen):
def compose(self) -> ComposeResult:
yield Header(show_clock=True)
yield Container(
Label(f'欢迎使用 "潜进" 启发式辅助记忆调度器, 版本 {metadata.ver}', classes="title-label"),
Label(f'欢迎使用 "潜进" 启发式辅助记忆调度器, 版本 {metadata.ver}, 使用 {pt.Electron.algorithm} 调度算法', classes="title-label"),
Label(f"当前的 UNIX 日时间戳: {aux.get_daystamp()}"),
Label(f'包含时间戳修正: UTC+{config.get("timezone_offset")/3600}'),
Label("选择待学习或待修改的记忆单元集:", classes="title-label"),
ListView(id="file-list", classes="file-list-view"),
Button("新建空的单元集", id="new_nucleon_button"),
#Button("新建空的单元集", id="new_nucleon_button"),
Label(f"\"潜进\" 开放源代码软件项目 | 版本 {metadata.ver} {metadata.stage.capitalize()} | Wang Zhiyu 2025"),
)
yield Footer()