diff --git a/src/cmbx_styles.py b/src/cmbx_styles.py new file mode 100644 index 0000000..455de4c --- /dev/null +++ b/src/cmbx_styles.py @@ -0,0 +1,45 @@ +# coding: utf8 +import sys +from PySide6 import __version__ as pyside6_version +from PySide6.QtCore import QAbstractListModel, QModelIndex, Qt, QObject +from PySide6.QtWidgets import QComboBox, QApplication, QWidget + + +class _StyleListModel(QAbstractListModel): + + def __init__(self, parent: QObject = None): + super().__init__(parent) + if sys.platform == "win32": + self.styles = ["windowsvista", "Fusion", "Windows"] + ver = list(map(lambda s: int(s), pyside6_version.split("."))) + if ver >= [6, 7, 0]: + self.styles.insert(0, "windows11") + elif sys.platform == "darwin": + self.styles = ["macOS", "Fusion", "Windows"] + elif sys.platform == "linux": + self.styles = ["Fusion", "Windows"] + else: + self.styles = [] + + def rowCount(self, parent: QModelIndex = ...): + return len(self.styles) + + def data(self, index: QModelIndex, role: int = ...): + row = index.row() + + if role == Qt.ItemDataRole.DisplayRole: + return self.styles[row] + + +class StyleComboBox(QComboBox): + + def __init__(self, parent: QWidget = None): + super().__init__(parent) + self.setModel(_StyleListModel(self)) + self.currentIndexChanged.connect(self.on_self_current_index_changed) + + def on_self_current_index_changed(self, index: int): + model = self.model() + idx = model.index(index, 0) + style = model.data(idx, Qt.ItemDataRole.DisplayRole) + QApplication.setStyle(style) diff --git a/src/mw_kps_unifier.py b/src/mw_kps_unifier.py index 5f109b5..27186a1 100644 --- a/src/mw_kps_unifier.py +++ b/src/mw_kps_unifier.py @@ -1,27 +1,66 @@ # coding: utf8 from PySide6 import QtWidgets, QtCore, QtGui -from .tab_load import TabLoad +from .page_load import PageLoad +from .cmbx_styles import StyleComboBox class UiKpsUnifier(object): - def __init__(self, window: QtWidgets.QWidget): + def __init__(self, window: QtWidgets.QMainWindow): window.setWindowTitle('KeePassXC 多合一') + self.cw = QtWidgets.QWidget(window) self.vly_m = QtWidgets.QVBoxLayout() - window.setLayout(self.vly_m) + self.cw.setLayout(self.vly_m) + window.setCentralWidget(self.cw) - self.tw_m = QtWidgets.QTabWidget(window) - self.vly_m.addWidget(self.tw_m) + self.menu_bar = window.menuBar() + self.menu_file = self.menu_bar.addMenu("文件") + self.act_new = QtGui.QAction("新建", self.cw) + self.act_open = QtGui.QAction("打开", self.cw) + self.menu_file.addActions([self.act_new, self.act_open]) - self.tab_load = TabLoad(window) - self.tw_m.addTab(self.tab_load, "加载") - self.tab_query = QtWidgets.QWidget(window) - self.tw_m.addTab(self.tab_query, "查询") + self.menu_view = self.menu_bar.addMenu("视图") + self.act_load = QtGui.QAction("加载", self.cw) + self.act_query = QtGui.QAction("查询", self.cw) + self.menu_view.addActions([self.act_load, self.act_query]) + + self.hly_top = QtWidgets.QHBoxLayout() + self.vly_m.addLayout(self.hly_top) + + self.lne_db_path = QtWidgets.QLineEdit(self.cw) + self.lne_db_path.setEnabled(False) + self.cmbx_styles = StyleComboBox(self.cw) + self.hly_top.addWidget(self.lne_db_path) + self.hly_top.addWidget(self.cmbx_styles) + + self.sw_m = QtWidgets.QStackedWidget(self.cw) + self.vly_m.addWidget(self.sw_m) + + self.page_load = PageLoad(self.cw) + self.sw_m.addWidget(self.page_load) + self.page_query = QtWidgets.QWidget(self.cw) + self.sw_m.addWidget(self.page_query) -class KpsUnifier(QtWidgets.QWidget): +class KpsUnifier(QtWidgets.QMainWindow): def __init__(self, parent=None): super().__init__(parent) self.ui = UiKpsUnifier(self) + self.ui.act_open.triggered.connect(self.on_act_open_triggered) + self.ui.act_load.triggered.connect(self.on_act_load_triggered) + self.ui.act_query.triggered.connect(self.on_act_query_triggered) + def sizeHint(self): return QtCore.QSize(860, 640) + + def on_act_open_triggered(self): + filename, _ = QtWidgets.QFileDialog.getOpenFileName(self, "打开", "../") + if len(filename) == 0: + return + self.ui.lne_db_path.setText(filename) + + def on_act_load_triggered(self): + self.ui.sw_m.setCurrentIndex(0) + + def on_act_query_triggered(self): + self.ui.sw_m.setCurrentIndex(1) diff --git a/src/tab_load.py b/src/page_load.py similarity index 98% rename from src/tab_load.py rename to src/page_load.py index 14b86d0..3b2e32e 100644 --- a/src/tab_load.py +++ b/src/page_load.py @@ -27,7 +27,7 @@ class WgLoadKps(QtWidgets.QWidget): item.pbn_load.setDisabled(True) -class TabLoad(QtWidgets.QWidget): +class PageLoad(QtWidgets.QWidget): def __init__(self, parent=None): super().__init__(parent) self.hly_m = QtWidgets.QHBoxLayout()