- added qdarktheme package into the code
This commit is contained in:
204
libs/qdarktheme/widget_gallery/mainwindow.py
Normal file
204
libs/qdarktheme/widget_gallery/mainwindow.py
Normal file
@@ -0,0 +1,204 @@
|
||||
"""Main module of widget gallery."""
|
||||
import libs.qdarktheme
|
||||
from libs.qdarktheme.qtpy.QtCore import QDir, Qt, Slot
|
||||
from libs.qdarktheme.qtpy.QtGui import QAction, QActionGroup, QFont, QIcon
|
||||
from libs.qdarktheme.qtpy.QtWidgets import (
|
||||
QApplication,
|
||||
QColorDialog,
|
||||
QFileDialog,
|
||||
QFontDialog,
|
||||
QLabel,
|
||||
QMainWindow,
|
||||
QMenuBar,
|
||||
QMessageBox,
|
||||
QSizePolicy,
|
||||
QStackedWidget,
|
||||
QStatusBar,
|
||||
QToolBar,
|
||||
QToolButton,
|
||||
QWidget,
|
||||
)
|
||||
from libs.qdarktheme.util import get_qdarktheme_root_path
|
||||
from libs.qdarktheme.widget_gallery.ui.dock_ui import DockUI
|
||||
from libs.qdarktheme.widget_gallery.ui.frame_ui import FrameUI
|
||||
from libs.qdarktheme.widget_gallery.ui.widgets_ui import WidgetsUI
|
||||
|
||||
|
||||
class _WidgetGalleryUI:
|
||||
def setup_ui(self, main_win: QMainWindow) -> None:
|
||||
# Actions
|
||||
self.action_open_folder = QAction(QIcon("icons:folder_open_24dp.svg"), "Open folder dialog")
|
||||
self.action_open_color_dialog = QAction(QIcon("icons:palette_24dp.svg"), "Open color dialog")
|
||||
self.action_open_font_dialog = QAction(QIcon("icons:font_download_24dp.svg"), "Open font dialog")
|
||||
self.action_enable = QAction(QIcon("icons:circle_24dp.svg"), "Enable")
|
||||
self.action_disable = QAction(QIcon("icons:clear_24dp.svg"), "Disable")
|
||||
self.actions_theme = [QAction(theme, main_win) for theme in ["dark", "light"]]
|
||||
self.actions_page = (
|
||||
QAction(QIcon("icons:widgets_24dp.svg"), "Move to widgets"),
|
||||
QAction(QIcon("icons:flip_to_front_24dp.svg"), "Move to dock"),
|
||||
QAction(QIcon("icons:crop_din_24dp.svg"), "Move to frame"),
|
||||
)
|
||||
self.actions_message_box = (
|
||||
QAction(text="Open question dialog"),
|
||||
QAction(text="Open information dialog"),
|
||||
QAction(text="Open warning dialog"),
|
||||
QAction(text="Open critical dialog"),
|
||||
)
|
||||
self.actions_corner_radius = (QAction(text="rounded"), QAction(text="sharp"))
|
||||
|
||||
action_group_toolbar = QActionGroup(main_win)
|
||||
|
||||
# Widgets
|
||||
self.central_window = QMainWindow()
|
||||
self.stack_widget = QStackedWidget()
|
||||
self.toolbar = QToolBar("Toolbar")
|
||||
|
||||
activitybar = QToolBar("activitybar")
|
||||
statusbar = QStatusBar()
|
||||
menubar = QMenuBar()
|
||||
tool_btn_settings, tool_btn_theme, tool_btn_enable, tool_btn_disable, tool_btn_message_box = (
|
||||
QToolButton() for _ in range(5)
|
||||
)
|
||||
|
||||
spacer = QToolButton()
|
||||
|
||||
# Setup Actions
|
||||
for action in self.actions_page:
|
||||
action.setCheckable(True)
|
||||
action_group_toolbar.addAction(action)
|
||||
self.actions_page[0].setChecked(True)
|
||||
|
||||
# Setup Widgets
|
||||
spacer.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Expanding)
|
||||
spacer.setEnabled(False)
|
||||
|
||||
activitybar.setMovable(False)
|
||||
activitybar.addActions(self.actions_page)
|
||||
activitybar.addWidget(spacer)
|
||||
activitybar.addWidget(tool_btn_settings)
|
||||
|
||||
tool_btn_settings.setIcon(QIcon("icons:settings_24dp.svg"))
|
||||
tool_btn_settings.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
|
||||
tool_btn_enable.setDefaultAction(self.action_enable)
|
||||
tool_btn_disable.setDefaultAction(self.action_disable)
|
||||
tool_btn_message_box.setIcon(QIcon("icons:announcement_24dp.svg"))
|
||||
tool_btn_message_box.setPopupMode(QToolButton.ToolButtonPopupMode.MenuButtonPopup)
|
||||
tool_btn_theme.setIcon(QIcon("icons:contrast_24dp.svg"))
|
||||
tool_btn_theme.setPopupMode(QToolButton.ToolButtonPopupMode.InstantPopup)
|
||||
|
||||
self.toolbar.addActions((self.action_open_folder, self.action_open_color_dialog, self.action_open_font_dialog))
|
||||
self.toolbar.addSeparator()
|
||||
self.toolbar.addWidget(QLabel("Popup"))
|
||||
self.toolbar.addWidget(tool_btn_message_box)
|
||||
self.toolbar.addWidget(tool_btn_theme)
|
||||
|
||||
statusbar.addPermanentWidget(tool_btn_enable)
|
||||
statusbar.addPermanentWidget(tool_btn_disable)
|
||||
statusbar.showMessage("Enable")
|
||||
|
||||
menu_toggle = menubar.addMenu("&Toggle")
|
||||
menu_toggle.addActions((self.action_enable, self.action_disable))
|
||||
menu_theme = menubar.addMenu("&Theme")
|
||||
menu_theme.addActions(self.actions_theme)
|
||||
menu_dialog = menubar.addMenu("&Dialog")
|
||||
menu_option = menubar.addMenu("&Option")
|
||||
menu_option.addActions(self.actions_corner_radius)
|
||||
menu_dialog.addActions((self.action_open_folder, self.action_open_color_dialog, self.action_open_font_dialog))
|
||||
menu_message_box = menu_dialog.addMenu("&Messages")
|
||||
menu_message_box.addActions(self.actions_message_box)
|
||||
|
||||
tool_btn_settings.setMenu(menu_toggle)
|
||||
tool_btn_theme.setMenu(menu_theme)
|
||||
tool_btn_message_box.setMenu(menu_message_box)
|
||||
|
||||
self.action_enable.setEnabled(False)
|
||||
|
||||
# Layout
|
||||
for ui in (WidgetsUI, DockUI, FrameUI):
|
||||
container = QWidget()
|
||||
ui().setup_ui(container)
|
||||
self.stack_widget.addWidget(container)
|
||||
|
||||
self.central_window.setCentralWidget(self.stack_widget)
|
||||
self.central_window.addToolBar(self.toolbar)
|
||||
|
||||
main_win.setCentralWidget(self.central_window)
|
||||
main_win.addToolBar(Qt.ToolBarArea.LeftToolBarArea, activitybar)
|
||||
main_win.setMenuBar(menubar)
|
||||
main_win.setStatusBar(statusbar)
|
||||
|
||||
|
||||
class WidgetGallery(QMainWindow):
|
||||
"""The main window class of example app."""
|
||||
|
||||
def __init__(self) -> None:
|
||||
"""Initialize the WidgetGallery class."""
|
||||
super().__init__()
|
||||
QDir.addSearchPath("icons", f"{get_qdarktheme_root_path().as_posix()}/widget_gallery/svg")
|
||||
self._ui = _WidgetGalleryUI()
|
||||
self._ui.setup_ui(self)
|
||||
self._theme = "dark"
|
||||
self._border_radius = "rounded"
|
||||
|
||||
# Signal
|
||||
self._ui.action_open_folder.triggered.connect(
|
||||
lambda: QFileDialog.getOpenFileName(self, "Open File", options=QFileDialog.Option.DontUseNativeDialog)
|
||||
)
|
||||
self._ui.action_open_color_dialog.triggered.connect(
|
||||
lambda: QColorDialog.getColor(parent=self, options=QColorDialog.ColorDialogOption.DontUseNativeDialog)
|
||||
)
|
||||
self._ui.action_open_font_dialog.triggered.connect(
|
||||
lambda: QFontDialog.getFont(QFont(), parent=self, options=QFontDialog.FontDialogOption.DontUseNativeDialog)
|
||||
)
|
||||
self._ui.action_enable.triggered.connect(self._toggle_state)
|
||||
self._ui.action_disable.triggered.connect(self._toggle_state)
|
||||
for action in self._ui.actions_theme:
|
||||
action.triggered.connect(self._change_theme)
|
||||
for action in self._ui.actions_page:
|
||||
action.triggered.connect(self._change_page)
|
||||
for action in self._ui.actions_message_box:
|
||||
action.triggered.connect(self._popup_message_box)
|
||||
for action in self._ui.actions_corner_radius:
|
||||
action.triggered.connect(self._change_corner_radius)
|
||||
|
||||
@Slot()
|
||||
def _change_page(self) -> None:
|
||||
action_name: str = self.sender().text() # type: ignore
|
||||
if "widgets" in action_name:
|
||||
index = 0
|
||||
elif "dock" in action_name:
|
||||
index = 1
|
||||
else:
|
||||
index = 2
|
||||
self._ui.stack_widget.setCurrentIndex(index)
|
||||
|
||||
@Slot()
|
||||
def _toggle_state(self) -> None:
|
||||
state: str = self.sender().text() # type: ignore
|
||||
self._ui.central_window.centralWidget().setEnabled(state == "Enable")
|
||||
self._ui.toolbar.setEnabled(state == "Enable")
|
||||
self._ui.action_enable.setEnabled(state == "Disable")
|
||||
self._ui.action_disable.setEnabled(state == "Enable")
|
||||
self.statusBar().showMessage(state)
|
||||
|
||||
@Slot()
|
||||
def _change_theme(self) -> None:
|
||||
self._theme = self.sender().text() # type: ignore
|
||||
QApplication.instance().setStyleSheet(libs.qdarktheme.load_stylesheet(self._theme, self._border_radius))
|
||||
|
||||
@Slot()
|
||||
def _change_corner_radius(self) -> None:
|
||||
self._border_radius: str = self.sender().text() # type: ignore
|
||||
QApplication.instance().setStyleSheet(libs.qdarktheme.load_stylesheet(self._theme, self._border_radius))
|
||||
|
||||
@Slot()
|
||||
def _popup_message_box(self) -> None:
|
||||
action_name: str = self.sender().text() # type: ignore
|
||||
if "question" in action_name:
|
||||
QMessageBox.question(self, "Question", "Question")
|
||||
elif "information" in action_name:
|
||||
QMessageBox.information(self, "Information", "Information")
|
||||
elif "warning" in action_name:
|
||||
QMessageBox.warning(self, "Warning", "Warning")
|
||||
elif "critical" in action_name:
|
||||
QMessageBox.critical(self, "Critical", "Critical")
|
||||
Reference in New Issue
Block a user