mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-25 18:10:21 -04:00 
			
		
		
		
	
		
			
	
	
		
			317 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			317 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!python | ||
|  | # -*- coding: utf-8 -*- | ||
|  | 
 | ||
|  | """Example of qdarkstyle use for Python and Qt applications.
 | ||
|  | 
 | ||
|  | This module a main window with every item that could be created with | ||
|  | Qt Design (common ones) in the basic states (enabled/disabled), and | ||
|  | (checked/unchecked) for those who has this attribute. | ||
|  | 
 | ||
|  | Requirements: | ||
|  | 
 | ||
|  |     - Python 2 or Python 3 | ||
|  |     - PyQt4 or PyQt5 or PySide or PySide2 | ||
|  |     - QtPy or PyQtGraph (if choosen) | ||
|  | 
 | ||
|  | To run this example using PyQt4, simple do | ||
|  | 
 | ||
|  | .. code-block:: python | ||
|  | 
 | ||
|  |     python example.py | ||
|  | 
 | ||
|  | or | ||
|  | 
 | ||
|  | .. code-block:: python | ||
|  | 
 | ||
|  |     python example.py  --qt_from=pyqt | ||
|  | 
 | ||
|  | Other options for qt_from are: pyqt5, pyside, qtpy and pyqtgraph. | ||
|  | 
 | ||
|  | You also can run the example without dark theme (no_dark), to check for | ||
|  | problems. | ||
|  | 
 | ||
|  | .. code-block:: python | ||
|  | 
 | ||
|  |     python example.py  --qt_from=pyqt --no_dark | ||
|  | 
 | ||
|  | .. note.. :: qdarkstyle does not have to be installed to run the example. | ||
|  | 
 | ||
|  | """
 | ||
|  | 
 | ||
|  | import logging | ||
|  | import sys | ||
|  | import argparse | ||
|  | import os | ||
|  | 
 | ||
|  | # make the example runnable without the need to install | ||
|  | from os.path import abspath, dirname | ||
|  | sys.path.insert(0, abspath(dirname(abspath(__file__)) + '/..')) | ||
|  | 
 | ||
|  | # must be in this place, after setting path, to not need to install | ||
|  | import qdarkstyle | ||
|  | from qdarkstyle import QT_BINDING, QT_ABSTRACTION | ||
|  | 
 | ||
|  | 
 | ||
|  | def main(): | ||
|  |     """Execute QDarkStyle example.""" | ||
|  |     parser = argparse.ArgumentParser(description=__doc__, | ||
|  |                                      formatter_class=argparse.RawDescriptionHelpFormatter) | ||
|  |     parser.add_argument('--qt_from', default='qtpy', | ||
|  |                         choices=['pyqt', 'pyqt5', 'pyside','pyside2', 'qtpy', 'pyqtgraph'], | ||
|  |                         help="Choose which wrapper/framework is to be used to run the example.", type=str) | ||
|  |     parser.add_argument('--no_dark', action='store_true', | ||
|  |                         help="Exihibts the original  window (without qdarkstyle).") | ||
|  |     parser.add_argument('--test', action='store_true', | ||
|  |                         help="Auto close window after 2s.") | ||
|  |     parser.add_argument('--reset', action='store_true', | ||
|  |                         help="Reset GUI settings (position, size).") | ||
|  |     # parsing arguments from command line | ||
|  |     args = parser.parse_args() | ||
|  | 
 | ||
|  |     # set log for debug | ||
|  |     logging.basicConfig(level=logging.DEBUG) | ||
|  | 
 | ||
|  |     # to avoid problems when testing without screen | ||
|  |     if args.test: | ||
|  |         os.environ['QT_QPA_PLATFORM']='offscreen' | ||
|  | 
 | ||
|  |     if args.qt_from == 'pyside': | ||
|  |         # using PySide wrapper | ||
|  |         from PySide.QtGui import QApplication, QMainWindow, QDockWidget | ||
|  |         from PySide.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_pyside_ui import Ui_MainWindow as ui_main | ||
|  | 
 | ||
|  |         from ui.dw_buttons_pyside_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_pyside_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_pyside_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_pyside_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  | 
 | ||
|  |         from ui.dw_widgets_pyside_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_pyside_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_pyside_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_pyside_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_pyside() | ||
|  | 
 | ||
|  |     elif args.qt_from == 'pyqt': | ||
|  |         # using PyQt4 wrapper | ||
|  |         from PyQt4.QtGui import QApplication, QMainWindow, QDockWidget | ||
|  |         from PyQt4.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_pyqt_ui import Ui_MainWindow as ui_main | ||
|  | 
 | ||
|  |         from ui.dw_buttons_pyqt_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_pyqt_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_pyqt_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_pyqt_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  | 
 | ||
|  |         from ui.dw_widgets_pyqt_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_pyqt_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_pyqt_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_pyqt_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_pyqt() | ||
|  | 
 | ||
|  |     elif args.qt_from == 'pyqt5': | ||
|  |         # using PyQt5 wrapper | ||
|  |         from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget | ||
|  |         from PyQt5.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_pyqt5_ui import Ui_MainWindow as ui_main | ||
|  | 
 | ||
|  |         from ui.dw_buttons_pyqt5_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_pyqt5_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_pyqt5_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  | 
 | ||
|  |         from ui.dw_widgets_pyqt5_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_pyqt5_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_pyqt5_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_pyqt5() | ||
|  | 
 | ||
|  |     elif args.qt_from == 'pyside2': | ||
|  |         # using PyQt5 wrapper | ||
|  |         from PySide2.QtWidgets import QApplication, QMainWindow, QDockWidget | ||
|  |         from PySide2.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_pyside2_ui import Ui_MainWindow as ui_main | ||
|  | 
 | ||
|  |         from ui.dw_buttons_pyside2_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_pyside2_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_pyside2_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_pyside2_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  | 
 | ||
|  |         from ui.dw_widgets_pyside2_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_pyside2_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_pyside2_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_pyside2_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_pyside2() | ||
|  | 
 | ||
|  |     elif args.qt_from == 'qtpy': | ||
|  |         # using QtPy API | ||
|  |         from qtpy.QtWidgets import QApplication, QMainWindow, QDockWidget | ||
|  |         from qtpy.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_qtpy_ui import Ui_MainWindow as ui_main | ||
|  | 
 | ||
|  |         from ui.dw_buttons_qtpy_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_qtpy_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_qtpy_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_qtpy_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  | 
 | ||
|  |         from ui.dw_widgets_qtpy_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_qtpy_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_qtpy_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_qtpy_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_from_environment() | ||
|  | 
 | ||
|  |     elif args.qt_from == 'pyqtgraph': | ||
|  |         # using PyQtGraph API | ||
|  |         from pyqtgraph.Qt.QtGui import QApplication, QMainWindow, QDockWidget | ||
|  |         from pyqtgraph.Qt.QtCore import QTimer, Qt, QSettings, QByteArray, QPoint, QSize | ||
|  |         #from pyqtgraph.Qt import QtGui, QtCore | ||
|  |         # import examples UI according to wrapper | ||
|  |         from ui.mw_menus_pyqtgraph_ui import Ui_MainWindow as ui_main | ||
|  |         from ui.dw_buttons_pyqtgraph_ui import Ui_DockWidget as ui_buttons | ||
|  |         from ui.dw_displays_pyqtgraph_ui import Ui_DockWidget as ui_displays | ||
|  |         from ui.dw_inputs_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_fields | ||
|  |         from ui.dw_inputs_no_fields_pyqtgraph_ui import Ui_DockWidget as ui_inputs_no_fields | ||
|  |         from ui.dw_widgets_pyqtgraph_ui import Ui_DockWidget as ui_widgets | ||
|  |         from ui.dw_views_pyqtgraph_ui import Ui_DockWidget as ui_views | ||
|  |         from ui.dw_containers_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_tabs | ||
|  |         from ui.dw_containers_no_tabs_pyqtgraph_ui import Ui_DockWidget as ui_containers_no_tabs | ||
|  |         # getting style | ||
|  |         style = qdarkstyle.load_stylesheet_from_environment(is_pyqtgraph=True) | ||
|  | 
 | ||
|  |     if args.no_dark: | ||
|  |         style = '' | ||
|  | 
 | ||
|  |     def write_settings(window): | ||
|  |         """Get window settings and write it into a file.""" | ||
|  |         settings = QSettings('QDarkStyle', 'QDarkStyle Example') | ||
|  |         settings.setValue('pos', window.pos()) | ||
|  |         settings.setValue('size', window.size()) | ||
|  |         settings.setValue('state', window.saveState()) | ||
|  | 
 | ||
|  |     def read_settings(window, reset=False): | ||
|  |         """Read and set window settings from a file.""" | ||
|  |         settings = QSettings('QDarkStyle', 'QDarkStyle Example') | ||
|  |         if args.qt_from == 'pyside' or args.qt_from == 'pyside2': | ||
|  |             pos = settings.value('pos', window.pos()) | ||
|  |             size = settings.value('size', window.size()) | ||
|  |             state = settings.value('state', window.saveState()) | ||
|  |         else: | ||
|  |             pos = settings.value('pos', window.pos(), type='QPoint') | ||
|  |             size = settings.value('size', window.size(), type='QSize') | ||
|  |             state = settings.value('state', window.saveState(), type='QByteArray') | ||
|  | 
 | ||
|  |         if not reset: | ||
|  |             window.restoreState(state) | ||
|  |             window.resize(size) | ||
|  |             window.move(pos) | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  |     # create the application | ||
|  |     app = QApplication(sys.argv) | ||
|  |     app.setOrganizationName('QDarkStyle') | ||
|  |     app.setApplicationName('QDarkStyle Example') | ||
|  | 
 | ||
|  |     # setup stylesheet | ||
|  |     app.setStyleSheet(style) | ||
|  | 
 | ||
|  |     # create main window | ||
|  |     window = QMainWindow() | ||
|  |     window.setObjectName('mainwindow') | ||
|  |     ui = ui_main() | ||
|  |     ui.setupUi(window) | ||
|  |     window.setWindowTitle("QDarkStyle v." + qdarkstyle.__version__) | ||
|  | 
 | ||
|  |     # create docks for buttons | ||
|  |     dw_buttons = QDockWidget() | ||
|  |     dw_buttons.setObjectName('buttons') | ||
|  |     ui_buttons = ui_buttons() | ||
|  |     ui_buttons.setupUi(dw_buttons) | ||
|  |     window.addDockWidget(Qt.RightDockWidgetArea, dw_buttons) | ||
|  | 
 | ||
|  |     # create docks for buttons | ||
|  |     dw_displays = QDockWidget() | ||
|  |     dw_displays.setObjectName('displays') | ||
|  |     ui_displays = ui_displays() | ||
|  |     ui_displays.setupUi(dw_displays) | ||
|  |     window.addDockWidget(Qt.RightDockWidgetArea, dw_displays) | ||
|  | 
 | ||
|  |     # create docks for inputs - no fields | ||
|  |     dw_inputs_no_fields = QDockWidget() | ||
|  |     dw_inputs_no_fields.setObjectName('inputs_no_fields') | ||
|  |     ui_inputs_no_fields = ui_inputs_no_fields() | ||
|  |     ui_inputs_no_fields.setupUi(dw_inputs_no_fields) | ||
|  |     window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_no_fields) | ||
|  | 
 | ||
|  |     # create docks for inputs - fields | ||
|  |     dw_inputs_fields = QDockWidget() | ||
|  |     dw_inputs_fields.setObjectName('_fields') | ||
|  |     ui_inputs_fields = ui_inputs_fields() | ||
|  |     ui_inputs_fields.setupUi(dw_inputs_fields) | ||
|  |     window.addDockWidget(Qt.RightDockWidgetArea, dw_inputs_fields) | ||
|  | 
 | ||
|  |     # create docks for widgets | ||
|  |     dw_widgets = QDockWidget() | ||
|  |     dw_widgets.setObjectName('widgets') | ||
|  |     ui_widgets = ui_widgets() | ||
|  |     ui_widgets.setupUi(dw_widgets) | ||
|  |     window.addDockWidget(Qt.LeftDockWidgetArea, dw_widgets) | ||
|  | 
 | ||
|  |     # create docks for views | ||
|  |     dw_views = QDockWidget() | ||
|  |     dw_views.setObjectName('views') | ||
|  |     ui_views = ui_views() | ||
|  |     ui_views.setupUi(dw_views) | ||
|  |     window.addDockWidget(Qt.LeftDockWidgetArea, dw_views) | ||
|  | 
 | ||
|  |     # create docks for containers - no tabs | ||
|  |     dw_containers_no_tabs = QDockWidget() | ||
|  |     dw_containers_no_tabs.setObjectName('containers_no_tabs') | ||
|  |     ui_containers_no_tabs = ui_containers_no_tabs() | ||
|  |     ui_containers_no_tabs.setupUi(dw_containers_no_tabs) | ||
|  |     window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_no_tabs) | ||
|  | 
 | ||
|  |     # create docks for containters - tabs | ||
|  |     dw_containers_tabs = QDockWidget() | ||
|  |     dw_containers_tabs.setObjectName('containers') | ||
|  |     ui_containers_tabs = ui_containers_tabs() | ||
|  |     ui_containers_tabs.setupUi(dw_containers_tabs) | ||
|  |     window.addDockWidget(Qt.LeftDockWidgetArea, dw_containers_tabs) | ||
|  | 
 | ||
|  |     # tabify right docks | ||
|  |     window.tabifyDockWidget(dw_buttons, dw_displays) | ||
|  |     window.tabifyDockWidget(dw_displays, dw_inputs_fields) | ||
|  |     window.tabifyDockWidget(dw_inputs_fields, dw_inputs_no_fields) | ||
|  | 
 | ||
|  |     # tabify right docks | ||
|  |     window.tabifyDockWidget(dw_containers_no_tabs, dw_containers_tabs) | ||
|  |     window.tabifyDockWidget(dw_containers_tabs, dw_widgets) | ||
|  |     window.tabifyDockWidget(dw_widgets, dw_views) | ||
|  | 
 | ||
|  |     # auto quit after 2s when testing on travis-ci | ||
|  |     if args.test: | ||
|  |         QTimer.singleShot(2000, app.exit) | ||
|  | 
 | ||
|  |     # run | ||
|  |     qdarkstyle.information() | ||
|  |     read_settings(window, args.reset) | ||
|  |     window.showMaximized() | ||
|  |     app.exec_() | ||
|  |     write_settings(window) | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if __name__ == "__main__": | ||
|  |     sys.exit(main()) |