修复若干bug
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+13
-1
@@ -858,6 +858,16 @@ class PanelWindow(QWidget):
|
||||
)
|
||||
self.groups_layout.insertWidget(self.groups_layout.count() - 1, gw)
|
||||
|
||||
def reset_groups_and_items(self):
|
||||
"""清空所有分组与程序,并刷新界面。"""
|
||||
database.reset_groups_and_items(recreate_default_group=True)
|
||||
# 清空搜索关键字,确保刷新后可见全部内容
|
||||
try:
|
||||
self.search_box.setText("")
|
||||
except Exception:
|
||||
pass
|
||||
self.refresh_groups()
|
||||
|
||||
def _add_group(self):
|
||||
name, ok = dialog_style.get_text(self, "新建分组", "分组名称:")
|
||||
if ok and name.strip():
|
||||
@@ -909,12 +919,13 @@ class PanelWindow(QWidget):
|
||||
def _collapse_body(self):
|
||||
"""收缩:隐藏内容区,窗口缩到只剩标题栏高度"""
|
||||
self._body.hide()
|
||||
self.weather_bar.hide()
|
||||
# 记录当前高度,展开时恢复
|
||||
self._expanded_height = self.height()
|
||||
title_h = (
|
||||
self.container.layout().contentsMargins().top()
|
||||
+ self.container.layout().contentsMargins().bottom()
|
||||
+ 46
|
||||
+ self._title_bar.sizeHint().height()
|
||||
)
|
||||
self.setFixedHeight(title_h)
|
||||
ic = "#cccccc" if theme.name() == "dark" else "#555555"
|
||||
@@ -923,6 +934,7 @@ class PanelWindow(QWidget):
|
||||
|
||||
def _expand_body(self):
|
||||
"""展开:恢复内容区和窗口高度"""
|
||||
self.weather_bar.show()
|
||||
self._body.show()
|
||||
h = getattr(self, "_expanded_height", 520)
|
||||
self.setMinimumHeight(MIN_H)
|
||||
|
||||
+80
-1
@@ -6,10 +6,12 @@ from PyQt6.QtWidgets import (
|
||||
QCheckBox, QGroupBox, QFormLayout, QSpinBox, QFrame
|
||||
)
|
||||
from PyQt6.QtCore import Qt, QSize
|
||||
from PyQt6.QtWidgets import QMessageBox
|
||||
from PyQt6.QtGui import QIcon, QPixmap
|
||||
import qtawesome as qta
|
||||
from db import database
|
||||
import ui.theme as theme
|
||||
import ui.dialog_style as dialog_style
|
||||
|
||||
|
||||
class SettingsWindow(QDialog):
|
||||
@@ -50,7 +52,10 @@ class SettingsWindow(QDialog):
|
||||
("fa5s.window-maximize", "窗口"),
|
||||
("fa5s.rocket", "启动"),
|
||||
("fa5s.heart", "捐赠"),
|
||||
("fa5s.eraser", "初始化"),
|
||||
]
|
||||
self._nav_ready = False
|
||||
self._block_nav = False
|
||||
for icon_name, label in pages:
|
||||
try:
|
||||
icon = qta.icon(icon_name, color="#888")
|
||||
@@ -59,6 +64,8 @@ class SettingsWindow(QDialog):
|
||||
# 防止图标名不存在导致设置页直接报错
|
||||
icon = qta.icon("fa5s.rocket", color="#888")
|
||||
item = QListWidgetItem(icon, label)
|
||||
if label == "初始化":
|
||||
item.setData(Qt.ItemDataRole.UserRole, "init")
|
||||
self.nav.addItem(item)
|
||||
self.nav.setCurrentRow(0)
|
||||
self.nav.currentRowChanged.connect(self._on_nav)
|
||||
@@ -69,6 +76,11 @@ class SettingsWindow(QDialog):
|
||||
self.stack.addWidget(self._page_window())
|
||||
self.stack.addWidget(self._page_startup())
|
||||
self.stack.addWidget(self._page_donate())
|
||||
self.stack.addWidget(self._page_initialization())
|
||||
# 此时 stack 已就绪,允许导航回调正常工作
|
||||
self._nav_ready = True
|
||||
self._last_nav_index = self.nav.currentRow()
|
||||
self.stack.setCurrentIndex(self._last_nav_index)
|
||||
|
||||
# 分割线
|
||||
line = QFrame()
|
||||
@@ -312,6 +324,29 @@ class SettingsWindow(QDialog):
|
||||
self._donate_card = card
|
||||
return page
|
||||
|
||||
def _page_initialization(self) -> QWidget:
|
||||
page = QWidget()
|
||||
layout = QVBoxLayout(page)
|
||||
layout.setContentsMargins(24, 20, 24, 20)
|
||||
layout.setSpacing(16)
|
||||
|
||||
layout.addWidget(self._section_title("初始化"))
|
||||
|
||||
desc = QLabel(
|
||||
"点击左侧「初始化」页签后,将弹出确认提醒。\n"
|
||||
"确认后会清空所有分组和程序(不可撤销)。"
|
||||
)
|
||||
desc.setWordWrap(True)
|
||||
desc.setStyleSheet("color:#888; font-size:13px; line-height:1.6;")
|
||||
layout.addWidget(desc)
|
||||
|
||||
self._init_status_lbl = QLabel("")
|
||||
self._init_status_lbl.setStyleSheet("font-size:12px; color:#f90;")
|
||||
layout.addWidget(self._init_status_lbl)
|
||||
layout.addStretch()
|
||||
|
||||
return page
|
||||
|
||||
def _open_donate_image(self, img_path: str):
|
||||
"""点击二维码后的弹窗大图查看。"""
|
||||
t = theme.current()
|
||||
@@ -386,7 +421,51 @@ class SettingsWindow(QDialog):
|
||||
return line
|
||||
|
||||
def _on_nav(self, index: int):
|
||||
self.stack.setCurrentIndex(index)
|
||||
if self._block_nav:
|
||||
return
|
||||
|
||||
if not getattr(self, "_nav_ready", False) or not hasattr(self, "stack"):
|
||||
return
|
||||
|
||||
item = self.nav.item(index)
|
||||
is_init_tab = bool(item and item.data(Qt.ItemDataRole.UserRole) == "init")
|
||||
|
||||
if not is_init_tab:
|
||||
self.stack.setCurrentIndex(index)
|
||||
self._last_nav_index = index
|
||||
return
|
||||
|
||||
ret = dialog_style.question(
|
||||
self,
|
||||
"初始化",
|
||||
"提醒请谨慎操作!!!!!\n\n"
|
||||
"此操作会清空所有分组和程序,且无法撤销。是否继续?",
|
||||
icon=QMessageBox.Icon.Warning,
|
||||
)
|
||||
if ret == QMessageBox.StandardButton.Yes:
|
||||
try:
|
||||
self._panel.reset_groups_and_items()
|
||||
except Exception as e:
|
||||
# 初始化失败也要尽量让用户知道原因
|
||||
dialog_style.warning(self, "初始化失败", f"清空数据失败:{e}")
|
||||
# 初始化失败则回退到上一个页签
|
||||
self._block_nav = True
|
||||
self.nav.setCurrentRow(self._last_nav_index)
|
||||
self._block_nav = False
|
||||
self.stack.setCurrentIndex(self._last_nav_index)
|
||||
return
|
||||
|
||||
if hasattr(self, "_init_status_lbl"):
|
||||
self._init_status_lbl.setText("已完成初始化(分组和程序已清空)。")
|
||||
|
||||
self.stack.setCurrentIndex(index)
|
||||
self._last_nav_index = index
|
||||
else:
|
||||
# 用户取消:回退到上一个页签
|
||||
self._block_nav = True
|
||||
self.nav.setCurrentRow(self._last_nav_index)
|
||||
self._block_nav = False
|
||||
self.stack.setCurrentIndex(self._last_nav_index)
|
||||
|
||||
def _apply_theme(self):
|
||||
t = theme.current()
|
||||
|
||||
Reference in New Issue
Block a user