add lock window function, and did some improvements for the whole structure

This commit is contained in:
2025-09-10 19:28:03 +08:00
parent 648dedb611
commit 34c74bf3d0
19 changed files with 544 additions and 168 deletions

View File

@@ -1,6 +1,7 @@
from pathlib import Path
from threading import Lock
base_path = Path(__file__).resolve().parent.parent.parent
code_dict = [4, 11, 4, 31, 22, 12, 19, 23, 7, 16, 7, 23, 1, 8, 7, 18, 27, 32, 28, 25, 7, 32, 9, 15, 2, 32, 0, 12, 26, 15, 14, 17]
salt = ""
max_db_number = 10
lock = Lock()
account = None

View File

@@ -1,5 +1,4 @@
import sqlite3
from threading import Lock
import time
from codes.common import clibs
@@ -30,10 +29,10 @@ def db_init(db_file):
def db_lock(func):
def wrapper(*args, **kwargs):
try:
Lock().acquire(True)
clibs.lock.acquire(True)
ret = func(*args, **kwargs)
finally:
Lock().release()
clibs.lock.release()
return ret
return wrapper
@@ -47,8 +46,7 @@ def db_backup():
db_file_backup.write_bytes(db_file.read_bytes())
db_dir = clibs.base_path / "assets/database"
db_list = [db for db in db_dir.glob("*.db")]
print(f"db_list: {sorted(db_list)}")
for db in sorted(db_list)[:-clibs.max_db_number]:
for db in sorted(db_list)[:-clibs.account["maximum_db_number"]]:
db.unlink()
def db_conn():
@@ -61,4 +59,9 @@ def db_conn():
cursor.execute("PRAGMA temp_store=memory")
cursor.execute("PRAGMA mmap_size=30000000000")
cursor.execute("PRAGMA cache_size=200000")
return conn, cursor
return conn, cursor
@db_lock
def db_close(conn, cursor):
cursor.close()
conn.close()

View File

@@ -3,6 +3,7 @@ import hashlib
from Crypto.Cipher import AES
from Crypto import Random
from Crypto.Util.Padding import pad, unpad
from codes.common import clibs
class PassCipher:
@@ -25,13 +26,12 @@ class PassCipher:
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
return plaintext.decode("utf-8")
# if __name__ == "__main__":
# salt = "my_secret_salt_string"
# cipher = PassCipher(salt)
# original_text = "这是一段需要加密的敏感信息"
# encrypted_text = cipher.encrypt(original_text)
# print(f"加密后的文本: {encrypted_text}")
# decrypted_text = cipher.decrypt(encrypted_text)
# print(f"解密后的文本: {decrypted_text}")
# print(f"加解密是否成功: {original_text == decrypted_text}")
@staticmethod
def gen_salt(text: str):
key = ""
passwd = {idx: char for idx, char in enumerate(text * 4)}
for idx in range(32):
char_i = 0 if ord(passwd[idx]) - clibs.account["code_dict"][idx] < 0 else ord(passwd[idx]) - clibs.account["code_dict"][idx]
key += chr(char_i)
salt = base64.urlsafe_b64encode(key.encode()).decode()
return salt

View File

@@ -19,8 +19,10 @@ def single_uic(ui_path: str, py_path: str):
except subprocess.CalledProcessError as e:
print(f"转换失败: {ui_file}\n{e.stderr}", file=sys.stderr)
if __name__ == "__main__":
def main():
ui_path = clibs.base_path / "assets" / "ui"
py_path = clibs.base_path / "codes" / "ui"
single_uic(str(ui_path), str(py_path))
if __name__ == "__main__":
main()

View File

@@ -16,70 +16,171 @@ from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient,
QIcon, QImage, QKeySequence, QLinearGradient,
QPainter, QPalette, QPixmap, QRadialGradient,
QTransform)
from PySide6.QtWidgets import (QApplication, QMainWindow, QMenu, QMenuBar,
QSizePolicy, QStatusBar, QWidget)
from PySide6.QtWidgets import (QApplication, QHBoxLayout, QLabel, QListWidget,
QListWidgetItem, QMainWindow, QSizePolicy, QStackedWidget,
QStatusBar, QToolBar, QVBoxLayout, QWidget)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(1100, 550)
MainWindow.setMinimumSize(QSize(1100, 550))
class Ui_App(object):
def setupUi(self, App):
if not App.objectName():
App.setObjectName(u"App")
App.resize(769, 356)
App.setMinimumSize(QSize(0, 0))
font = QFont()
font.setFamilies([u"Consolas"])
font.setPointSize(12)
MainWindow.setFont(font)
self.actionExit = QAction(MainWindow)
self.actionExit.setObjectName(u"actionExit")
self.action = QAction(MainWindow)
self.action.setObjectName(u"action")
self.actionExit_2 = QAction(MainWindow)
self.actionExit_2.setObjectName(u"actionExit_2")
self.action_2 = QAction(MainWindow)
self.action_2.setObjectName(u"action_2")
self.action_3 = QAction(MainWindow)
self.action_3.setObjectName(u"action_3")
self.action_4 = QAction(MainWindow)
self.action_4.setObjectName(u"action_4")
self.centralwidget = QWidget(MainWindow)
App.setFont(font)
self.ac_homepage = QAction(App)
self.ac_homepage.setObjectName(u"ac_homepage")
self.ac_homepage.setMenuRole(QAction.MenuRole.NoRole)
self.ac_settings = QAction(App)
self.ac_settings.setObjectName(u"ac_settings")
self.ac_settings.setMenuRole(QAction.MenuRole.NoRole)
self.ac_logs = QAction(App)
self.ac_logs.setObjectName(u"ac_logs")
self.ac_logs.setMenuRole(QAction.MenuRole.NoRole)
self.ac_about = QAction(App)
self.ac_about.setObjectName(u"ac_about")
self.ac_about.setMenuRole(QAction.MenuRole.NoRole)
self.ac_quit = QAction(App)
self.ac_quit.setObjectName(u"ac_quit")
self.ac_quit.setMenuRole(QAction.MenuRole.NoRole)
self.ac_caging = QAction(App)
self.ac_caging.setObjectName(u"ac_caging")
self.ac_caging.setMenuRole(QAction.MenuRole.NoRole)
self.centralwidget = QWidget(App)
self.centralwidget.setObjectName(u"centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 1100, 33))
self.menu = QMenu(self.menubar)
self.menu.setObjectName(u"menu")
self.menu_2 = QMenu(self.menubar)
self.menu_2.setObjectName(u"menu_2")
self.menu_3 = QMenu(self.menubar)
self.menu_3.setObjectName(u"menu_3")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QStatusBar(MainWindow)
self.verticalLayout = QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName(u"verticalLayout")
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.lw_navigation = QListWidget(self.centralwidget)
QListWidgetItem(self.lw_navigation)
QListWidgetItem(self.lw_navigation)
QListWidgetItem(self.lw_navigation)
QListWidgetItem(self.lw_navigation)
QListWidgetItem(self.lw_navigation)
QListWidgetItem(self.lw_navigation)
self.lw_navigation.setObjectName(u"lw_navigation")
self.horizontalLayout.addWidget(self.lw_navigation)
self.sw_pages = QStackedWidget(self.centralwidget)
self.sw_pages.setObjectName(u"sw_pages")
self.page = QWidget()
self.page.setObjectName(u"page")
self.label_3 = QLabel(self.page)
self.label_3.setObjectName(u"label_3")
self.label_3.setGeometry(QRect(110, 70, 54, 16))
self.sw_pages.addWidget(self.page)
self.page_2 = QWidget()
self.page_2.setObjectName(u"page_2")
self.label_2 = QLabel(self.page_2)
self.label_2.setObjectName(u"label_2")
self.label_2.setGeometry(QRect(100, 130, 54, 16))
self.sw_pages.addWidget(self.page_2)
self.page_3 = QWidget()
self.page_3.setObjectName(u"page_3")
self.label = QLabel(self.page_3)
self.label.setObjectName(u"label")
self.label.setGeometry(QRect(130, 70, 54, 16))
self.sw_pages.addWidget(self.page_3)
self.horizontalLayout.addWidget(self.sw_pages)
self.horizontalLayout.setStretch(0, 1)
self.horizontalLayout.setStretch(1, 5)
self.verticalLayout.addLayout(self.horizontalLayout)
App.setCentralWidget(self.centralwidget)
self.statusbar = QStatusBar(App)
self.statusbar.setObjectName(u"statusbar")
MainWindow.setStatusBar(self.statusbar)
App.setStatusBar(self.statusbar)
self.toolBar = QToolBar(App)
self.toolBar.setObjectName(u"toolBar")
self.toolBar.setMovable(False)
App.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.toolBar)
self.menubar.addAction(self.menu.menuAction())
self.menubar.addAction(self.menu_3.menuAction())
self.menubar.addAction(self.menu_2.menuAction())
self.menu.addAction(self.action_4)
self.menu.addAction(self.action_3)
self.menu_2.addAction(self.action_2)
self.toolBar.addAction(self.ac_homepage)
self.toolBar.addAction(self.ac_settings)
self.toolBar.addAction(self.ac_logs)
self.toolBar.addAction(self.ac_about)
self.toolBar.addAction(self.ac_caging)
self.toolBar.addAction(self.ac_quit)
self.retranslateUi(MainWindow)
self.retranslateUi(App)
QMetaObject.connectSlotsByName(MainWindow)
self.sw_pages.setCurrentIndex(0)
QMetaObject.connectSlotsByName(App)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"Toolbox", None))
self.actionExit.setText(QCoreApplication.translate("MainWindow", u"Exit", None))
self.action.setText(QCoreApplication.translate("MainWindow", u"\u5173\u4e8e", None))
self.actionExit_2.setText(QCoreApplication.translate("MainWindow", u"Exit", None))
self.action_2.setText(QCoreApplication.translate("MainWindow", u"\u5173\u4e8e", None))
self.action_3.setText(QCoreApplication.translate("MainWindow", u"\u9000\u51fa", None))
self.action_4.setText(QCoreApplication.translate("MainWindow", u"\u8bbe\u7f6e", None))
self.menu.setTitle(QCoreApplication.translate("MainWindow", u"\u6587\u4ef6", None))
self.menu_2.setTitle(QCoreApplication.translate("MainWindow", u"\u5e2e\u52a9", None))
self.menu_3.setTitle(QCoreApplication.translate("MainWindow", u"\u65e5\u5fd7", None))
def retranslateUi(self, App):
App.setWindowTitle(QCoreApplication.translate("App", u"Toolbox", None))
self.ac_homepage.setText(QCoreApplication.translate("App", u"\u4e3b\u9875", None))
#if QT_CONFIG(tooltip)
self.ac_homepage.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+H", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_homepage.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+H", None))
#endif // QT_CONFIG(shortcut)
self.ac_settings.setText(QCoreApplication.translate("App", u"\u8bbe\u7f6e", None))
#if QT_CONFIG(tooltip)
self.ac_settings.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+S", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_settings.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+S", None))
#endif // QT_CONFIG(shortcut)
self.ac_logs.setText(QCoreApplication.translate("App", u"\u65e5\u5fd7", None))
#if QT_CONFIG(tooltip)
self.ac_logs.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+L", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_logs.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+L", None))
#endif // QT_CONFIG(shortcut)
self.ac_about.setText(QCoreApplication.translate("App", u"\u5173\u4e8e", None))
#if QT_CONFIG(tooltip)
self.ac_about.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+A", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_about.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+A", None))
#endif // QT_CONFIG(shortcut)
self.ac_quit.setText(QCoreApplication.translate("App", u"\u9000\u51fa", None))
#if QT_CONFIG(tooltip)
self.ac_quit.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+Q", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_quit.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+Q", None))
#endif // QT_CONFIG(shortcut)
self.ac_caging.setText(QCoreApplication.translate("App", u"\u9501\u5b9a", None))
#if QT_CONFIG(tooltip)
self.ac_caging.setToolTip(QCoreApplication.translate("App", u"Ctrl+Alt+C", None))
#endif // QT_CONFIG(tooltip)
#if QT_CONFIG(shortcut)
self.ac_caging.setShortcut(QCoreApplication.translate("App", u"Ctrl+Alt+C", None))
#endif // QT_CONFIG(shortcut)
__sortingEnabled = self.lw_navigation.isSortingEnabled()
self.lw_navigation.setSortingEnabled(False)
___qlistwidgetitem = self.lw_navigation.item(0)
___qlistwidgetitem.setText(QCoreApplication.translate("App", u"\u4e2a\u4eba", None));
___qlistwidgetitem1 = self.lw_navigation.item(1)
___qlistwidgetitem1.setText(QCoreApplication.translate("App", u"\u5b9e\u7528", None));
___qlistwidgetitem2 = self.lw_navigation.item(2)
___qlistwidgetitem2.setText(QCoreApplication.translate("App", u"\u6548\u7387", None));
___qlistwidgetitem3 = self.lw_navigation.item(3)
___qlistwidgetitem3.setText(QCoreApplication.translate("App", u"\u5f00\u53d1", None));
___qlistwidgetitem4 = self.lw_navigation.item(4)
___qlistwidgetitem4.setText(QCoreApplication.translate("App", u"\u8bbe\u8ba1", None));
___qlistwidgetitem5 = self.lw_navigation.item(5)
___qlistwidgetitem5.setText(QCoreApplication.translate("App", u"\u5de5\u4f5c", None));
self.lw_navigation.setSortingEnabled(__sortingEnabled)
self.label_3.setText(QCoreApplication.translate("App", u"1", None))
self.label_2.setText(QCoreApplication.translate("App", u"2", None))
self.label.setText(QCoreApplication.translate("App", u"3", None))
self.toolBar.setWindowTitle(QCoreApplication.translate("App", u"toolBar", None))
# retranslateUi

View File

@@ -109,12 +109,14 @@ class Ui_login(object):
font2.setPointSize(12)
font2.setBold(True)
self.pb_login.setFont(font2)
self.pb_login.setAutoDefault(True)
self.horizontalLayout.addWidget(self.pb_login)
self.pb_cancel = QPushButton(login)
self.pb_cancel.setObjectName(u"pb_cancel")
self.pb_cancel.setFont(font2)
self.pb_cancel.setAutoDefault(True)
self.horizontalLayout.addWidget(self.pb_cancel)