mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -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())
 |