mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-04 05:50:31 -05: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())
 |