style: 代码格式化

This commit is contained in:
2026-04-23 00:13:57 +08:00
parent aaee4d513e
commit 613b4ba045
23 changed files with 144 additions and 104 deletions
+7 -4
View File
@@ -22,6 +22,7 @@ class AboutScreen(Screen):
("z", "go_back", "关于"),
]
SUB_TITLE = "关于"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -32,9 +33,11 @@ class AboutScreen(Screen):
shim.set_term_title(f"{self.app.TITLE} - {self.SUB_TITLE}")
def compose(self) -> ComposeResult:
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer(id="about_container"):
yield Label("[b]关于与版本信息[/b]")
@@ -115,7 +118,7 @@ Textual 框架版本: {textual_version}
import textual
return textual.__version__
except ImportError, AttributeError:
except (ImportError, AttributeError):
return "未知"
def _get_terminal_info(self) -> str:
+21 -9
View File
@@ -47,8 +47,10 @@ class DashboardScreen(Screen):
def compose(self) -> ComposeResult:
"""组合界面组件"""
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer():
yield Horizontal( # 顶部的状态
Vertical(
@@ -76,14 +78,19 @@ class DashboardScreen(Screen):
)
yield ListView(id="repo_list", classes="repo-list") # 单元集选择
from heurams.services.attic import Attic
a = Attic('ana', {'totaltime': 0, 'openpuzzles': 0, 'puzzles_err': 0})
a = Attic("ana", {"totaltime": 0, "openpuzzles": 0, "puzzles_err": 0})
yield Label(f"版本 {version.ver} {version.stage.capitalize()}") # 版本信息
yield Label(f"{round(a.data['totaltime'], 2)} 秒内处理了 {a.data['openpuzzles']} 个谜题, 正确率{'无法求解' if not a.data['openpuzzles'] else ' ' + str(round(100 * (1 - a.data['puzzles_err']/a.data['openpuzzles']), 2)) + '%'}, 平均速度{'无法求解' if not a.data['totaltime'] else ' ' + str(round(a.data['openpuzzles']/a.data['totaltime'], 2)) + '个/s'}", id='analysis') # 版本信息
yield Label(
f"{round(a.data['totaltime'], 2)} 秒内处理了 {a.data['openpuzzles']} 个谜题, 正确率{'无法求解' if not a.data['openpuzzles'] else ' ' + str(round(100 * (1 - a.data['puzzles_err']/a.data['openpuzzles']), 2)) + '%'}, 平均速度{'无法求解' if not a.data['totaltime'] else ' ' + str(round(a.data['openpuzzles']/a.data['totaltime'], 2)) + '个/s'}",
id="analysis",
) # 版本信息
yield Footer()
@on(events.ScreenResume)
def post_active(self, event):
from heurams.interface import shim
shim.set_term_title(f"{self.app.TITLE} - {self.SUB_TITLE}")
# https://github.com/Textualize/textual/discussions/4268
# self.refresh(recompose=True) 此函数有问题且官方不管 而且性能低
@@ -112,17 +119,21 @@ class DashboardScreen(Screen):
}
repo.preview = {
"review": 0,
"new": repo.config["scheduled_num"], # TODO: 考虑之后在这里加点运算避免 SM-2 积压, 但现在需要的是直观!
"new": repo.config[
"scheduled_num"
], # TODO: 考虑之后在这里加点运算避免 SM-2 积压, 但现在需要的是直观!
}
initial_time = float("inf")
for i in range(repo.data_length): # TODO: 增加异步性能优化, 但是学习数据属实规模小...
for i in range(
repo.data_length
): # TODO: 增加异步性能优化, 但是学习数据属实规模小...
e = pt.Electron.from_data(
electronic_data=repo.electronic_data_lict[i],
algo_name=repo.config["algorithm"],
)
# n = pt.Nucleon.from_data(repo.nucleonic_data_lict[i])
if e.is_activated():
repo.progress["have_activated_ever"] = True # 被激活过~
repo.progress["have_activated_ever"] = True # 被激活过~
repo.progress["touched"] += 1
repo.nearest_review_time = min(repo.nearest_review_time, e.nextdate())
if timer.get_daystamp() >= e.nextdate():
@@ -141,7 +152,7 @@ class DashboardScreen(Screen):
repodirs = sorted(
self.repos,
key=lambda r: r.nearest_review_time,
reverse=True, # 紧张的先复习
reverse=True, # 紧张的先复习
)
# 填充列表
@@ -159,7 +170,7 @@ class DashboardScreen(Screen):
return
for r in self.repos:
self.repolink[str(r.manifest['package'])] = r # 用于规避 ctype id 对象还原
self.repolink[str(r.manifest["package"])] = r # 用于规避 ctype id 对象还原
# NOTE: 上一行不要使用 id(), id 可能被重用!
list_item = ListItem(
*[Label(line) for line in r.prompt.splitlines()],
@@ -202,5 +213,6 @@ class DashboardScreen(Screen):
logger.debug(f"event.button.id: {event.button.id}")
if event.button.id.startswith("slaunch_repo_"): # type: ignore
from .preparation import launch
launch(repo=self.repolink[event.button.id.removeprefix("slaunch_repo_")], app=self.app, scheduled_num=-1) # type: ignore
# TODO: 这样启动的记忆实例的状态机无法绑定到 PreparationScreen 中
+5 -3
View File
@@ -56,9 +56,11 @@ class FavoriteManagerScreen(Screen):
def compose(self) -> ComposeResult:
"""组合界面组件"""
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer(id="favorites-container"):
if not self.favorites:
yield Label("暂无收藏", classes="empty-label")
+28 -19
View File
@@ -20,6 +20,7 @@ from .. import shim
logger = get_logger(__name__)
class MemScreen(Screen):
BINDINGS = [
("q", "go_back", "返回"),
@@ -59,14 +60,18 @@ class MemScreen(Screen):
@on(events.ScreenResume)
def post_active(self, event):
from heurams.interface import shim
shim.set_term_title(f"{self.app.TITLE} - {self.SUB_TITLE}")
def compose(self) -> ComposeResult:
from heurams.services.attic import Attic
a = Attic('ana', {'openqueue': 0})
a.data['openqueue'] += 1
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
a = Attic("ana", {"openqueue": 0})
a.data["openqueue"] += 1
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer():
yield Label(self._get_progress_text(), id="head_stat")
yield ScrollableContainer(id="puzzle_container")
@@ -81,8 +86,9 @@ class MemScreen(Screen):
self.expander = self.procession.get_expander()
from heurams.services.attic import Attic
import time
a = Attic('ana', {'last': time.time()})
a.data['last'] = time.time()
a = Attic("ana", {"last": time.time()})
a.data["last"] = time.time()
self.mount_puzzle()
self.update_display()
@@ -122,8 +128,8 @@ class MemScreen(Screen):
def mount_finished_widget(self):
"""挂载已完成组件"""
a = Attic('ana', {'finished': 0})
a.data['finished'] += 1
a = Attic("ana", {"finished": 0})
a.data["finished"] += 1
container = self.query_one("#puzzle_container")
for i in container.children:
i.remove()
@@ -176,12 +182,14 @@ class MemScreen(Screen):
self.forward_atom(self.expander.get_quality())
self.update_state()
from heurams.services.attic import Attic
a = Attic('ana', {'openpuzzles': 0})
a = Attic('ana', {'totaltime': 0})
a.data['openpuzzles'] += 1
a = Attic("ana", {"openpuzzles": 0})
a = Attic("ana", {"totaltime": 0})
a.data["openpuzzles"] += 1
import time
a.data['totaltime'] += time.time() - a.data['last']
a.data['last'] = time.time()
a.data["totaltime"] += time.time() - a.data["last"]
a.data["last"] = time.time()
self.mount_puzzle()
self.update_display()
@@ -201,8 +209,8 @@ class MemScreen(Screen):
logger.debug(f"Quality: {quality}")
self.atom_reporter(quality)
if quality <= 3:
a = Attic('ana', {'puzzles_err': 0})
a.data['puzzles_err'] += 1
a = Attic("ana", {"puzzles_err": 0})
a.data["puzzles_err"] += 1
self.procession.append()
self.update_state() # 刷新状态
self.procession.forward(1)
@@ -261,7 +269,8 @@ class MemScreen(Screen):
def action_resume_mark(self):
from heurams.services.attic import Attic
import time
a = Attic('ana')
l = a.data['last']
a.data['last'] = time.time()
self.app.notify(f"时间恢复已修正: {l} -> {a.data['last']}")
a = Attic("ana")
l = a.data["last"]
a.data["last"] = time.time()
self.app.notify(f"时间恢复已修正: {l} -> {a.data['last']}")
@@ -1,4 +1,3 @@
from textual.app import ComposeResult
from textual.containers import Grid
from textual.screen import ModalScreen
+5 -4
View File
@@ -111,9 +111,11 @@ class PrecachingScreen(Screen):
self.cache_stats["cache_rate"] = cache_rate
def compose(self) -> ComposeResult:
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer(id="precache_container"):
yield Label("[b]音频预缓存[/b]", classes="title-label")
with Container():
@@ -314,7 +316,6 @@ class PrecachingScreen(Screen):
try:
import shutil
shutil.rmtree(cache_dir, ignore_errors=True)
self.update_status("已清空", "音频缓存已清空", 0)
self._update_cache_display() # 更新缓存统计显示
+7 -4
View File
@@ -52,10 +52,13 @@ class PreparationScreen(Screen):
def compose(self) -> ComposeResult:
from heurams.services.attic import Attic
a = Attic('ana', {'openpre': 0})
a.data['openpre'] += 1
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
a = Attic("ana", {"openpre": 0})
a.data["openpre"] += 1
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer(id="main_container"):
yield Markdown(
f"**准备就绪**: `{self.repo.manifest['title']}`\n", id="title"
+15 -11
View File
@@ -1,6 +1,5 @@
"""设置页面"""
from textual.app import ComposeResult
from textual.containers import ScrollableContainer, Horizontal
from textual.screen import Screen
@@ -47,12 +46,15 @@ class SettingScreen(Screen):
@on(events.ScreenResume)
def post_active(self, event):
from heurams.interface import shim
shim.set_term_title(f"{self.app.TITLE} - {self.SUB_TITLE}")
def compose(self) -> ComposeResult:
"""组合界面组件"""
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer():
yield Label("[b]设置页面[/b]")
for i in config_var.get():
@@ -61,7 +63,8 @@ class SettingScreen(Screen):
a = self._get_subcfg(f"{i}")
if a:
yield Collapsible(
*a, title=i + f'\n[d]{config_var.get().get(f"_{i}_desc", "")}[/d]'
*a,
title=i + f'\n[d]{config_var.get().get(f"_{i}_desc", "")}[/d]',
)
yield Label(
"退出页面时, 所作的更改会立即保存, 但仍建议重启软件以确保新的配置得到应用",
@@ -113,7 +116,7 @@ class SettingScreen(Screen):
prompt=f'{parent.get(f"{i}", "")}',
id=domize(f"{parent_epath}.{i}"),
),
classes="setting-item"
classes="setting-item",
)
)
elif isinstance(parent[f"_{i}_candidate"], list):
@@ -125,7 +128,7 @@ class SettingScreen(Screen):
prompt=f'{parent.get(f"{i}", "")}',
id=domize(f"{parent_epath}.{i}"),
),
classes="setting-item"
classes="setting-item",
)
)
else:
@@ -139,7 +142,7 @@ class SettingScreen(Screen):
type="number",
id=domize(f"{parent_epath}.{i}"),
),
classes="setting-item"
classes="setting-item",
)
)
elif isinstance(parent[i], str):
@@ -152,7 +155,7 @@ class SettingScreen(Screen):
type="text",
id=domize(f"{parent_epath}.{i}"),
),
classes="setting-item"
classes="setting-item",
)
)
elif isinstance(parent[i], bool):
@@ -160,10 +163,11 @@ class SettingScreen(Screen):
Horizontal(
Label(i + f'\n[d]{parent.get(f"_{i}_desc", "")}[/d]'),
Switch(
value=parent[i], id=domize(f"{parent_epath}.{i}"),
value=parent[i],
id=domize(f"{parent_epath}.{i}"),
classes="setting-switch",
),
classes="setting-item"
classes="setting-item",
)
)
elif isinstance(parent[i], int):
@@ -176,7 +180,7 @@ class SettingScreen(Screen):
type="integer",
id=domize(f"{parent_epath}.{i}"),
),
classes="setting-item"
classes="setting-item",
)
)
elif isinstance(parent[i], list):
+5 -3
View File
@@ -33,9 +33,11 @@ class SyncScreen(Screen):
shim.set_term_title(f"{self.app.TITLE} - {self.SUB_TITLE}")
def compose(self) -> ComposeResult:
if config_var.get()['interface']['global']['show_header']:
yield Header(show_clock=config_var.get()['interface']['global']['clock_on_header'])
if config_var.get()["interface"]["global"]["show_header"]:
yield Header(
show_clock=config_var.get()["interface"]["global"]["clock_on_header"]
)
with ScrollableContainer(id="sync_container"):
# 标题和连接状态
yield Static("同步工具", classes="title")