增加再学习机制和状态反馈
This commit is contained in:
@@ -29,6 +29,7 @@ class Composition:
|
|||||||
screen: Screen,
|
screen: Screen,
|
||||||
reactor,
|
reactor,
|
||||||
atom: Tuple[pt.Electron, pt.Nucleon, Dict] = pt.Atom.placeholder(),
|
atom: Tuple[pt.Electron, pt.Nucleon, Dict] = pt.Atom.placeholder(),
|
||||||
|
extra = {}
|
||||||
):
|
):
|
||||||
self.screen = screen
|
self.screen = screen
|
||||||
self.atom = atom
|
self.atom = atom
|
||||||
@@ -58,7 +59,7 @@ class Composition:
|
|||||||
|
|
||||||
|
|
||||||
class Finished(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)
|
super().__init__(screen, reactor, atom)
|
||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
@@ -66,7 +67,7 @@ class Finished(Composition):
|
|||||||
|
|
||||||
|
|
||||||
class Placeholder(Composition):
|
class Placeholder(Composition):
|
||||||
def __init__(self, screen: Screen):
|
def __init__(self, screen: Screen, extra = {}):
|
||||||
self.screen = screen
|
self.screen = screen
|
||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
@@ -78,7 +79,7 @@ class Placeholder(Composition):
|
|||||||
|
|
||||||
|
|
||||||
class Recognition(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)
|
super().__init__(screen, reactor, atom)
|
||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
@@ -130,7 +131,7 @@ class Recognition(Composition):
|
|||||||
|
|
||||||
|
|
||||||
class BasicEvaluation(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)
|
super().__init__(screen, reactor, atom)
|
||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
@@ -167,8 +168,9 @@ class BasicEvaluation(Composition):
|
|||||||
|
|
||||||
|
|
||||||
class FillBlank(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)
|
super().__init__(screen, reactor, atom)
|
||||||
|
self.extra = extra
|
||||||
self.inputlist = []
|
self.inputlist = []
|
||||||
self.hashtable = {}
|
self.hashtable = {}
|
||||||
self._work()
|
self._work()
|
||||||
@@ -180,6 +182,8 @@ class FillBlank(Composition):
|
|||||||
random.shuffle(self.ans)
|
random.shuffle(self.ans)
|
||||||
|
|
||||||
def compose(self):
|
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(self.puzzle.wording, id=self.regid("sentence"))
|
||||||
yield Label(f"当前输入: {self.inputlist}", id=self.regid("inputpreview"))
|
yield Label(f"当前输入: {self.inputlist}", id=self.regid("inputpreview"))
|
||||||
for i in self.ans:
|
for i in self.ans:
|
||||||
@@ -206,11 +210,11 @@ class FillBlank(Composition):
|
|||||||
else:
|
else:
|
||||||
self.inputlist = []
|
self.inputlist = []
|
||||||
self.reactor.report(self.atom, 2)
|
self.reactor.report(self.atom, 2)
|
||||||
return 1
|
return 2
|
||||||
|
|
||||||
|
|
||||||
class DrawCard(Composition):
|
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)
|
super().__init__(screen, reactor, atom)
|
||||||
self.inputlist = []
|
self.inputlist = []
|
||||||
self.hashtable = {}
|
self.hashtable = {}
|
||||||
@@ -247,7 +251,7 @@ class DrawCard(Composition):
|
|||||||
else:
|
else:
|
||||||
self.inputlist = []
|
self.inputlist = []
|
||||||
self.reactor.report(self.atom, 2)
|
self.reactor.report(self.atom, 2)
|
||||||
return 1
|
return 2
|
||||||
|
|
||||||
|
|
||||||
registry = {
|
registry = {
|
||||||
|
27
screens.py
27
screens.py
@@ -56,6 +56,11 @@ class MemScreen(Screen):
|
|||||||
print(self.reactor.forward())
|
print(self.reactor.forward())
|
||||||
#self._forward_judge(first_forward)
|
#self._forward_judge(first_forward)
|
||||||
self.compo = next(self.reactor.current_appar)
|
self.compo = next(self.reactor.current_appar)
|
||||||
|
self.feedback_state = 0 # 默认状态
|
||||||
|
self.feedback_state_map = {
|
||||||
|
0: "",
|
||||||
|
255: "回答有误, 请重试. 或者重新学习此单元",
|
||||||
|
}
|
||||||
|
|
||||||
def compose(self) -> ComposeResult:
|
def compose(self) -> ComposeResult:
|
||||||
if type(self.compo).__name__ == "Recognition":
|
if type(self.compo).__name__ == "Recognition":
|
||||||
@@ -63,19 +68,27 @@ class MemScreen(Screen):
|
|||||||
yield Header(show_clock=True)
|
yield Header(show_clock=True)
|
||||||
with Center():
|
with Center():
|
||||||
yield Static(
|
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()
|
yield from self.compo.compose()
|
||||||
|
if self.feedback_state == 255:
|
||||||
|
yield Button("重新学习此单元", id="re-recognize", variant="warning")
|
||||||
yield Footer()
|
yield Footer()
|
||||||
|
|
||||||
def on_mount(self):
|
def on_mount(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def on_button_pressed(self, event):
|
def on_button_pressed(self, event):
|
||||||
|
try:
|
||||||
|
if event.button.id == "re-recognize":
|
||||||
|
return
|
||||||
|
except:
|
||||||
|
pass
|
||||||
ret = self.compo.handler(event, "button")
|
ret = self.compo.handler(event, "button")
|
||||||
self._forward_judge(ret)
|
self._forward_judge(ret)
|
||||||
|
|
||||||
def _forward_judge(self, ret):
|
def _forward_judge(self, ret):
|
||||||
|
self.feedback_state = 0
|
||||||
if ret == -1:
|
if ret == -1:
|
||||||
return
|
return
|
||||||
if ret == 0:
|
if ret == 0:
|
||||||
@@ -108,7 +121,11 @@ class MemScreen(Screen):
|
|||||||
else:
|
else:
|
||||||
self.refresh_ui()
|
self.refresh_ui()
|
||||||
return
|
return
|
||||||
if ret == 1:
|
if ret >= 1:
|
||||||
|
if ret == 2:
|
||||||
|
self.feedback_state = 255 # 表示错误
|
||||||
|
else:
|
||||||
|
self.feedback_state = 0
|
||||||
self.refresh_ui()
|
self.refresh_ui()
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -234,12 +251,12 @@ class DashboardScreen(Screen):
|
|||||||
def compose(self) -> ComposeResult:
|
def compose(self) -> ComposeResult:
|
||||||
yield Header(show_clock=True)
|
yield Header(show_clock=True)
|
||||||
yield Container(
|
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"当前的 UNIX 日时间戳: {aux.get_daystamp()}"),
|
||||||
Label(f'包含时间戳修正: UTC+{config.get("timezone_offset")/3600}'),
|
Label(f'包含时间戳修正: UTC+{config.get("timezone_offset")/3600}'),
|
||||||
Label("选择待学习或待修改的记忆单元集:", classes="title-label"),
|
Label("选择待学习或待修改的记忆单元集:", classes="title-label"),
|
||||||
ListView(id="file-list", classes="file-list-view"),
|
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"),
|
Label(f"\"潜进\" 开放源代码软件项目 | 版本 {metadata.ver} {metadata.stage.capitalize()} | Wang Zhiyu 2025"),
|
||||||
)
|
)
|
||||||
yield Footer()
|
yield Footer()
|
||||||
|
Reference in New Issue
Block a user