''' shared ====== Shared imports and compatibility definitions between Qt5 and Qt6. ''' import argparse import os import sys example_dir = os.path.dirname(os.path.realpath(__file__)) home = os.path.dirname(example_dir) dist = os.path.join(home, 'dist') def create_parser(): '''Create an argparser with the base settings for all Qt applications.''' parser = argparse.ArgumentParser( description='Configurations for the Qt5 application.' ) parser.add_argument( '--stylesheet', help='stylesheet name (`dark`, `light`, `native`, ...)', default='native', ) # Know working styles include: # 1. Fusion # 2. Windows parser.add_argument( '--style', help='application style (`Fusion`, `Windows`, `native`, ...)', default='native', ) parser.add_argument( '--font-size', help='font size for the application', type=float, default=-1 ) parser.add_argument( '--font-family', help='the font family' ) parser.add_argument( '--scale', help='scale factor for the UI', type=float, default=1, ) parser.add_argument( '--pyqt6', help='use PyQt6 rather than PyQt5.', action='store_true' ) # Linux or Unix-like only. parser.add_argument( '--use-x11', help='force the use of x11 on compatible systems.', action='store_true' ) return parser def parse_args(parser): '''Parse the command-line arguments and hot-patch the args.''' args, unknown = parser.parse_known_args() # Need to fix an issue on Wayland on Linux: # conda-forge does not support Wayland, for who knows what reason. if sys.platform.lower().startswith('linux') and 'CONDA_PREFIX' in os.environ: args.use_x11 = True if args.use_x11: os.environ['XDG_SESSION_TYPE'] = 'x11' return args, unknown def import_qt(args): '''Import the Qt modules''' if args.pyqt6: from PyQt6 import QtCore, QtGui, QtWidgets QtCore.QDir.addSearchPath(args.stylesheet, f'{dist}/pyqt6/{args.stylesheet}/') else: sys.path.insert(0, home) from PyQt5 import QtCore, QtGui, QtWidgets import breeze_resources return QtCore, QtGui, QtWidgets def get_resources(args): '''Get the resource format for the Qt application.''' if args.pyqt6: return f'{args.stylesheet}:' return f':/{args.stylesheet}/' def get_stylesheet(resource_format): '''Get the path to the stylesheet.''' return f'{resource_format}stylesheet.qss' def get_compat_definitions(args): '''Create our compatibility definitions.''' ns = argparse.Namespace() if args.pyqt6: from PyQt6 import QtCore, QtGui, QtWidgets # Modules ns.QtCore = QtCore ns.QtGui = QtGui ns.QtWidgets = QtWidgets # Scoped enums. ns.Orientation = QtCore.Qt.Orientation ns.StandardPixmap = QtWidgets.QStyle.StandardPixmap ns.ToolBarArea = QtCore.Qt.ToolBarArea ns.FrameShape = QtWidgets.QFrame.Shape ns.FrameShadow = QtWidgets.QFrame.Shadow ns.FrameStyleMask = QtWidgets.QFrame.StyleMask ns.ToolButtonPopupMode = QtWidgets.QToolButton.ToolButtonPopupMode ns.AlignmentFlag = QtCore.Qt.AlignmentFlag ns.OpenModeFlag = QtCore.QFile.OpenModeFlag ns.TabShape = QtWidgets.QTabWidget.TabShape ns.ItemFlag = QtCore.Qt.ItemFlag ns.CheckState = QtCore.Qt.CheckState ns.TabPosition = QtWidgets.QTabWidget.TabPosition ns.EchoMode = QtWidgets.QLineEdit.EchoMode ns.ArrowType = QtCore.Qt.ArrowType ns.WindowState = QtCore.Qt.WindowState ns.PenStyle = QtCore.Qt.PenStyle ns.PenCapStyle = QtCore.Qt.PenCapStyle ns.PenJoinStyle = QtCore.Qt.PenJoinStyle ns.StateFlag = QtWidgets.QStyle.StateFlag ns.EventType = QtCore.QEvent.Type ns.ColorRole = QtGui.QPalette.ColorRole ns.TickPosition = QtWidgets.QSlider.TickPosition ns.ComplexControl = QtWidgets.QStyle.ComplexControl ns.SubControl = QtWidgets.QStyle.SubControl ns.ScrollBarPolicy = QtCore.Qt.ScrollBarPolicy ns.AspectRatioMode = QtCore.Qt.AspectRatioMode ns.MessageStandardButton = QtWidgets.QMessageBox.StandardButton ns.MessageIcon = QtWidgets.QMessageBox.Icon ns.FileMode = QtWidgets.QFileDialog.FileMode ns.ColorOption = QtWidgets.QColorDialog.ColorDialogOption ns.SegmentStyle = QtWidgets.QLCDNumber.SegmentStyle ns.FileIconType = QtWidgets.QFileIconProvider.IconType ns.FontDialogOption = QtWidgets.QFontDialog.FontDialogOption ns.TextFormat = QtCore.Qt.TextFormat ns.AspectRatioMode = QtCore.Qt.AspectRatioMode ns.ScrollBarPolicy = QtCore.Qt.ScrollBarPolicy ns.ToolButtonStyle = QtCore.Qt.ToolButtonStyle ns.FileOption = QtWidgets.QFileDialog.Option.DontUseNativeDialog ns.DialogStandardButton = QtWidgets.QDialogButtonBox.StandardButton ns.DialogButtonRole = QtWidgets.QDialogButtonBox.ButtonRole ns.WizardStyle = QtWidgets.QWizard.WizardStyle ns.WizardOption = QtWidgets.QWizard.WizardOption ns.WizardPixmap = QtWidgets.QWizard.WizardPixmap ns.DockWidgetArea = QtCore.Qt.DockWidgetArea ns.DockWidgetFeature = QtWidgets.QDockWidget.DockWidgetFeature ns.InputDialogOption = QtWidgets.QInputDialog.InputDialogOption ns.ProgressDirection = QtWidgets.QProgressBar.Direction ns.ButtonPosition = QtWidgets.QTabBar.ButtonPosition ns.TabShape = QtWidgets.QTabWidget.TabShape ns.InputMode = QtWidgets.QInputDialog.InputMode ns.RubberBandShape = QtWidgets.QRubberBand.Shape ns.TextInteractionFlag = QtCore.Qt.TextInteractionFlag ns.WindowType = QtCore.Qt.WindowType ns.WindowState = QtCore.Qt.WindowState ns.WidgetAttribute = QtCore.Qt.WidgetAttribute ns.TextElideMode = QtCore.Qt.TextElideMode ns.CursorShape = QtCore.Qt.CursorShape ns.MouseButton = QtCore.Qt.MouseButton ns.SizePolicy = QtWidgets.QSizePolicy.Policy ns.SizeConstraint = QtWidgets.QLayout.SizeConstraint # QObjects ns.QAction = QtGui.QAction ns.QFileSystemModel = QtGui.QFileSystemModel ns.QUndoGroup = QtGui.QUndoGroup ns.QUndoStack = QtGui.QUndoStack ns.QUndoCommand = QtGui.QUndoCommand # Enumerations ns.Horizontal = ns.Orientation.Horizontal ns.Vertical = ns.Orientation.Vertical ns.AlignTop = ns.AlignmentFlag.AlignTop ns.AlignBottom = ns.AlignmentFlag.AlignBottom ns.AlignLeft = ns.AlignmentFlag.AlignLeft ns.AlignRight = ns.AlignmentFlag.AlignRight ns.AlignHCenter = ns.AlignmentFlag.AlignHCenter ns.AlignVCenter = ns.AlignmentFlag.AlignVCenter ns.AlignCenter = ns.AlignmentFlag.AlignCenter ns.NoFrame = ns.FrameShape.NoFrame ns.Box = ns.FrameShape.Box ns.Panel = ns.FrameShape.Panel ns.StyledPanel = ns.FrameShape.StyledPanel ns.HLine = ns.FrameShape.HLine ns.VLine = ns.FrameShape.VLine ns.WinPanel = ns.FrameShape.WinPanel ns.TopToolBarArea = ns.ToolBarArea.TopToolBarArea ns.LeftToolBarArea = ns.ToolBarArea.LeftToolBarArea ns.Plain = ns.FrameShadow.Plain ns.Raised = ns.FrameShadow.Raised ns.Sunken = ns.FrameShadow.Sunken ns.InstantPopup = ns.ToolButtonPopupMode.InstantPopup ns.MenuButtonPopup = ns.ToolButtonPopupMode.MenuButtonPopup ns.ItemIsUserCheckable = ns.ItemFlag.ItemIsUserCheckable ns.ItemIsUserTristate = ns.ItemFlag.ItemIsUserTristate ns.Checked = ns.CheckState.Checked ns.Unchecked = ns.CheckState.Unchecked ns.PartiallyChecked = ns.CheckState.PartiallyChecked ns.ReadOnly = ns.OpenModeFlag.ReadOnly ns.Text = ns.OpenModeFlag.Text ns.North = ns.TabPosition.North ns.West = ns.TabPosition.West ns.East = ns.TabPosition.East ns.South = ns.TabPosition.South ns.LeftArrow = ns.ArrowType.LeftArrow ns.RightArrow = ns.ArrowType.RightArrow ns.UpArrow = ns.ArrowType.UpArrow ns.DownArrow = ns.ArrowType.DownArrow ns.Triangular = ns.TabShape.Triangular ns.NoEcho = ns.EchoMode.NoEcho ns.Password = ns.EchoMode.Password ns.PasswordEchoOnEdit = ns.EchoMode.PasswordEchoOnEdit ns.SolidLine = ns.PenStyle.SolidLine ns.DotLine = ns.PenStyle.DotLine ns.FlatCap = ns.PenCapStyle.FlatCap ns.SquareCap = ns.PenCapStyle.SquareCap ns.RoundCap = ns.PenCapStyle.RoundCap ns.MiterJoin = ns.PenJoinStyle.MiterJoin ns.BevelJoin = ns.PenJoinStyle.BevelJoin ns.RoundJoin = ns.PenJoinStyle.RoundJoin ns.SvgMiterJoin = ns.PenJoinStyle.SvgMiterJoin ns.State_HasFocus = ns.StateFlag.State_HasFocus ns.State_Selected = ns.StateFlag.State_Selected ns.Enter = ns.EventType.Enter ns.Leave = ns.EventType.Leave ns.HoverEnter = ns.EventType.HoverEnter ns.HoverMove = ns.EventType.HoverMove ns.HoverLeave = ns.EventType.HoverLeave ns.MouseButtonPress = ns.EventType.MouseButtonPress ns.MouseButtonRelease = ns.EventType.MouseButtonRelease ns.MouseMove = ns.EventType.MouseMove ns.WindowPalette = ns.ColorRole.Window ns.PlaceholderText = ns.ColorRole.PlaceholderText ns.ToolTipBase = ns.ColorRole.ToolTipBase ns.ToolTipText = ns.ColorRole.ToolTipText ns.NoTicks = ns.TickPosition.NoTicks ns.TicksAbove = ns.TickPosition.TicksAbove ns.TicksBelow = ns.TickPosition.TicksBelow ns.TicksBothSides = ns.TickPosition.TicksBothSides ns.CC_Slider = ns.ComplexControl.CC_Slider ns.SC_SliderHandle = ns.SubControl.SC_SliderHandle ns.SC_SliderGroove = ns.SubControl.SC_SliderGroove ns.SP_ArrowBack = ns.StandardPixmap.SP_ArrowBack ns.SP_ArrowDown = ns.StandardPixmap.SP_ArrowDown ns.SP_ArrowForward = ns.StandardPixmap.SP_ArrowForward ns.SP_ArrowLeft = ns.StandardPixmap.SP_ArrowLeft ns.SP_ArrowRight = ns.StandardPixmap.SP_ArrowRight ns.SP_ArrowUp = ns.StandardPixmap.SP_ArrowUp ns.SP_BrowserReload = ns.StandardPixmap.SP_BrowserReload ns.SP_BrowserStop = ns.StandardPixmap.SP_BrowserStop ns.SP_CommandLink = ns.StandardPixmap.SP_CommandLink ns.SP_ComputerIcon = ns.StandardPixmap.SP_ComputerIcon ns.SP_CustomBase = ns.StandardPixmap.SP_CustomBase ns.SP_DesktopIcon = ns.StandardPixmap.SP_DesktopIcon ns.SP_DialogApplyButton = ns.StandardPixmap.SP_DialogApplyButton ns.SP_DialogCancelButton = ns.StandardPixmap.SP_DialogCancelButton ns.SP_DialogCloseButton = ns.StandardPixmap.SP_DialogCloseButton ns.SP_DialogDiscardButton = ns.StandardPixmap.SP_DialogDiscardButton ns.SP_DialogHelpButton = ns.StandardPixmap.SP_DialogHelpButton ns.SP_DialogNoButton = ns.StandardPixmap.SP_DialogNoButton ns.SP_DialogOkButton = ns.StandardPixmap.SP_DialogOkButton ns.SP_DialogOpenButton = ns.StandardPixmap.SP_DialogOpenButton ns.SP_DialogResetButton = ns.StandardPixmap.SP_DialogResetButton ns.SP_DialogSaveButton = ns.StandardPixmap.SP_DialogSaveButton ns.SP_DialogYesButton = ns.StandardPixmap.SP_DialogYesButton ns.SP_DirClosedIcon = ns.StandardPixmap.SP_DirClosedIcon ns.SP_DirHomeIcon = ns.StandardPixmap.SP_DirHomeIcon ns.SP_DirIcon = ns.StandardPixmap.SP_DirIcon ns.SP_DirLinkIcon = ns.StandardPixmap.SP_DirLinkIcon ns.SP_DirLinkOpenIcon = ns.StandardPixmap.SP_DirLinkOpenIcon ns.SP_DirOpenIcon = ns.StandardPixmap.SP_DirOpenIcon ns.SP_DockWidgetCloseButton = ns.StandardPixmap.SP_DockWidgetCloseButton ns.SP_DriveCDIcon = ns.StandardPixmap.SP_DriveCDIcon ns.SP_DriveDVDIcon = ns.StandardPixmap.SP_DriveDVDIcon ns.SP_DriveFDIcon = ns.StandardPixmap.SP_DriveFDIcon ns.SP_DriveHDIcon = ns.StandardPixmap.SP_DriveHDIcon ns.SP_DriveNetIcon = ns.StandardPixmap.SP_DriveNetIcon ns.SP_FileDialogBack = ns.StandardPixmap.SP_FileDialogBack ns.SP_FileDialogContentsView = ns.StandardPixmap.SP_FileDialogContentsView ns.SP_FileDialogDetailedView = ns.StandardPixmap.SP_FileDialogDetailedView ns.SP_FileDialogEnd = ns.StandardPixmap.SP_FileDialogEnd ns.SP_FileDialogInfoView = ns.StandardPixmap.SP_FileDialogInfoView ns.SP_FileDialogListView = ns.StandardPixmap.SP_FileDialogListView ns.SP_FileDialogNewFolder = ns.StandardPixmap.SP_FileDialogNewFolder ns.SP_FileDialogStart = ns.StandardPixmap.SP_FileDialogStart ns.SP_FileDialogToParent = ns.StandardPixmap.SP_FileDialogToParent ns.SP_FileIcon = ns.StandardPixmap.SP_FileIcon ns.SP_FileLinkIcon = ns.StandardPixmap.SP_FileLinkIcon ns.SP_MediaPause = ns.StandardPixmap.SP_MediaPause ns.SP_MediaPlay = ns.StandardPixmap.SP_MediaPlay ns.SP_MediaSeekBackward = ns.StandardPixmap.SP_MediaSeekBackward ns.SP_MediaSeekForward = ns.StandardPixmap.SP_MediaSeekForward ns.SP_MediaSkipBackward = ns.StandardPixmap.SP_MediaSkipBackward ns.SP_MediaSkipForward = ns.StandardPixmap.SP_MediaSkipForward ns.SP_MediaStop = ns.StandardPixmap.SP_MediaStop ns.SP_MediaVolume = ns.StandardPixmap.SP_MediaVolume ns.SP_MediaVolumeMuted = ns.StandardPixmap.SP_MediaVolumeMuted ns.SP_LineEditClearButton = ns.StandardPixmap.SP_LineEditClearButton ns.SP_DialogYesToAllButton = ns.StandardPixmap.SP_DialogYesToAllButton ns.SP_DialogNoToAllButton = ns.StandardPixmap.SP_DialogNoToAllButton ns.SP_DialogSaveAllButton = ns.StandardPixmap.SP_DialogSaveAllButton ns.SP_DialogAbortButton = ns.StandardPixmap.SP_DialogAbortButton ns.SP_DialogRetryButton = ns.StandardPixmap.SP_DialogRetryButton ns.SP_DialogIgnoreButton = ns.StandardPixmap.SP_DialogIgnoreButton ns.SP_RestoreDefaultsButton = ns.StandardPixmap.SP_RestoreDefaultsButton if QtCore.QT_VERSION >= 393984: ns.SP_TabCloseButton = ns.StandardPixmap.SP_TabCloseButton ns.SP_MessageBoxCritical = ns.StandardPixmap.SP_MessageBoxCritical ns.SP_MessageBoxInformation = ns.StandardPixmap.SP_MessageBoxInformation ns.SP_MessageBoxQuestion = ns.StandardPixmap.SP_MessageBoxQuestion ns.SP_MessageBoxWarning = ns.StandardPixmap.SP_MessageBoxWarning ns.SP_TitleBarCloseButton = ns.StandardPixmap.SP_TitleBarCloseButton ns.SP_TitleBarContextHelpButton = ns.StandardPixmap.SP_TitleBarContextHelpButton ns.SP_TitleBarMaxButton = ns.StandardPixmap.SP_TitleBarMaxButton ns.SP_TitleBarMenuButton = ns.StandardPixmap.SP_TitleBarMenuButton ns.SP_TitleBarMinButton = ns.StandardPixmap.SP_TitleBarMinButton ns.SP_TitleBarNormalButton = ns.StandardPixmap.SP_TitleBarNormalButton ns.SP_TitleBarShadeButton = ns.StandardPixmap.SP_TitleBarShadeButton ns.SP_TitleBarUnshadeButton = ns.StandardPixmap.SP_TitleBarUnshadeButton ns.SP_ToolBarHorizontalExtensionButton = ns.StandardPixmap.SP_ToolBarHorizontalExtensionButton ns.SP_ToolBarVerticalExtensionButton = ns.StandardPixmap.SP_ToolBarVerticalExtensionButton ns.SP_TrashIcon = ns.StandardPixmap.SP_TrashIcon ns.SP_VistaShield = ns.StandardPixmap.SP_VistaShield ns.MessageOk = ns.MessageStandardButton.Ok ns.MessageCancel = ns.MessageStandardButton.Cancel ns.MessageClose = ns.MessageStandardButton.Close ns.MessageOpen = ns.MessageStandardButton.Open ns.MessageReset = ns.MessageStandardButton.Reset ns.MessageSave = ns.MessageStandardButton.Save ns.MessageSaveAll = ns.MessageStandardButton.SaveAll ns.MessageRestoreDefaults = ns.MessageStandardButton.RestoreDefaults ns.MessageYes = ns.MessageStandardButton.Yes ns.MessageHelp = ns.MessageStandardButton.Help ns.MessageNo = ns.MessageStandardButton.No ns.MessageApply = ns.MessageStandardButton.Apply ns.MessageDiscard = ns.MessageStandardButton.Discard ns.MessageCritical = ns.MessageIcon.Critical ns.MessageInformation = ns.MessageIcon.Information ns.MessageNoIcon = ns.MessageIcon.NoIcon ns.MessageQuestion = ns.MessageIcon.Question ns.MessageWarning = ns.MessageIcon.Warning # Qt6 expects an int value, not enumerated value for the StyleMask. ns.Shadow_Mask = ns.FrameStyleMask.Shadow_Mask.value ns.Shape_Mask = ns.FrameStyleMask.Shape_Mask.value ns.AnyFile = ns.FileMode.AnyFile ns.ExistingFile = ns.FileMode.ExistingFile ns.ExistingFiles = ns.FileMode.ExistingFiles ns.Directory = ns.FileMode.Directory ns.ColorShowAlphaChannel = ns.ColorOption.ShowAlphaChannel ns.ColorNoButtons = ns.ColorOption.NoButtons ns.ColorDontUseNativeDialog = ns.ColorOption.DontUseNativeDialog ns.LCDOutline = ns.SegmentStyle.Outline ns.LCDFlat = ns.SegmentStyle.Flat ns.NetworkIcon = ns.FileIconType.Network ns.FontNoButtons = ns.FontDialogOption.NoButtons ns.FontDontUseNativeDialog = ns.FontDialogOption.DontUseNativeDialog ns.ClassicStyle = ns.WizardStyle.ClassicStyle ns.ModernStyle = ns.WizardStyle.ModernStyle ns.MacStyle = ns.WizardStyle.MacStyle ns.AeroStyle = ns.WizardStyle.AeroStyle ns.PlainText = ns.TextFormat.PlainText ns.RichText = ns.TextFormat.RichText ns.AutoText = ns.TextFormat.AutoText ns.MarkdownText = ns.TextFormat.MarkdownText ns.KeepAspectRatio = ns.AspectRatioMode.KeepAspectRatio ns.ScrollBarAsNeeded = ns.ScrollBarPolicy.ScrollBarAsNeeded ns.ToolButtonIconOnly = ns.ToolButtonStyle.ToolButtonIconOnly ns.ToolButtonTextOnly = ns.ToolButtonStyle.ToolButtonTextOnly ns.ToolButtonTextBesideIcon = ns.ToolButtonStyle.ToolButtonTextBesideIcon ns.ToolButtonTextUnderIcon = ns.ToolButtonStyle.ToolButtonTextUnderIcon ns.ToolButtonFollowStyle = ns.ToolButtonStyle.ToolButtonFollowStyle ns.FileDontUseNativeDialog = ns.FileOption.DontUseNativeDialog ns.DialogYesRole = ns.DialogButtonRole.YesRole ns.DialogOk = ns.DialogStandardButton.Ok ns.DialogCancel = ns.DialogStandardButton.Cancel ns.HaveHelpButton = ns.WizardOption.HaveHelpButton ns.WatermarkPixmap = ns.WizardPixmap.WatermarkPixmap ns.LogoPixmap = ns.WizardPixmap.LogoPixmap ns.BannerPixmap = ns.WizardPixmap.BannerPixmap ns.BackgroundPixmap = ns.WizardPixmap.BackgroundPixmap ns.LeftDockWidgetArea = ns.DockWidgetArea.LeftDockWidgetArea DockWidgetClosable = ns.DockWidgetFeature.DockWidgetClosable DockWidgetFloatable = ns.DockWidgetFeature.DockWidgetFloatable DockWidgetMovable = ns.DockWidgetFeature.DockWidgetMovable ns.AllDockWidgetFeatures = DockWidgetClosable | DockWidgetFloatable | DockWidgetMovable ns.DockWidgetVerticalTitleBar = ns.DockWidgetFeature.DockWidgetVerticalTitleBar ns.InputNoButtons = ns.InputDialogOption.NoButtons ns.UseListViewForComboBoxItems = ns.InputDialogOption.UseListViewForComboBoxItems ns.TopToBottom = ns.ProgressDirection.TopToBottom ns.BottomToTop = ns.ProgressDirection.BottomToTop ns.Rounded = ns.TabShape.Rounded ns.Triangular = ns.TabShape.Triangular ns.LeftSide = ns.ButtonPosition.LeftSide ns.RightSide = ns.ButtonPosition.RightSide ns.IntInput = ns.InputMode.IntInput ns.DoubleInput = ns.InputMode.DoubleInput ns.RubberBandLine = ns.RubberBandShape.Line ns.RubberBandRectangle = ns.RubberBandShape.Rectangle ns.TextSelectableByMouse = ns.TextInteractionFlag.TextSelectableByMouse ns.TextEditorInteraction = ns.TextInteractionFlag.TextEditorInteraction ns.Window = ns.WindowType.Window ns.Dialog = ns.WindowType.Dialog ns.SubWindow = ns.WindowType.SubWindow ns.WindowContextHelpButtonHint = ns.WindowType.WindowContextHelpButtonHint ns.WindowShadeButtonHint = ns.WindowType.WindowShadeButtonHint ns.FramelessWindowHint = ns.WindowType.FramelessWindowHint ns.WindowStaysOnTopHint = ns.WindowType.WindowStaysOnTopHint ns.WindowNoState = ns.WindowState.WindowNoState ns.WindowMinimized = ns.WindowState.WindowMinimized ns.WindowMaximized = ns.WindowState.WindowMaximized ns.WA_Hover = ns.WidgetAttribute.WA_Hover ns.WA_LayoutOnEntireRect = ns.WidgetAttribute.WA_LayoutOnEntireRect ns.WA_LayoutUsesWidgetRect = ns.WidgetAttribute.WA_LayoutUsesWidgetRect ns.ElideLeft = ns.TextElideMode.ElideLeft ns.ElideRight = ns.TextElideMode.ElideRight ns.ElideMiddle = ns.TextElideMode.ElideMiddle ns.ElideNone = ns.TextElideMode.ElideNone ns.CrossCursor = ns.CursorShape.CrossCursor ns.SizeVerCursor = ns.CursorShape.SizeVerCursor ns.SizeHorCursor = ns.CursorShape.SizeHorCursor ns.SizeBDiagCursor = ns.CursorShape.SizeBDiagCursor ns.SizeFDiagCursor = ns.CursorShape.SizeFDiagCursor ns.SizeAllCursor = ns.CursorShape.SizeAllCursor ns.WhatsThisCursor = ns.CursorShape.WhatsThisCursor ns.LeftButton = ns.MouseButton.LeftButton ns.RightButton = ns.MouseButton.RightButton ns.SizeFixed = ns.SizePolicy.Fixed ns.SizeMinimum = ns.SizePolicy.Minimum ns.SizeMaximum = ns.SizePolicy.Maximum ns.SizePreferred = ns.SizePolicy.Preferred ns.SizeExpanding = ns.SizePolicy.Expanding ns.SizeMinimumExpanding = ns.SizePolicy.MinimumExpanding ns.SizeIgnored = ns.SizePolicy.Ignored ns.SetFixedSize = ns.SizeConstraint.SetFixedSize else: from PyQt5 import QtCore, QtGui, QtWidgets # Modules ns.QtCore = QtCore ns.QtGui = QtGui ns.QtWidgets = QtWidgets # QObjects ns.QAction = QtWidgets.QAction ns.QFileSystemModel = QtWidgets.QFileSystemModel ns.QUndoGroup = QtWidgets.QUndoGroup ns.QUndoStack = QtWidgets.QUndoStack ns.QUndoCommand = QtWidgets.QUndoCommand # Enumerations ns.Horizontal = QtCore.Qt.Horizontal ns.Vertical = QtCore.Qt.Vertical ns.TopToolBarArea = QtCore.Qt.TopToolBarArea ns.LeftToolBarArea = QtCore.Qt.LeftToolBarArea ns.NoFrame = QtWidgets.QFrame.NoFrame ns.Box = QtWidgets.QFrame.Box ns.Panel = QtWidgets.QFrame.Panel ns.StyledPanel = QtWidgets.QFrame.StyledPanel ns.HLine = QtWidgets.QFrame.HLine ns.VLine = QtWidgets.QFrame.VLine ns.WinPanel = QtWidgets.QFrame.WinPanel ns.Plain = QtWidgets.QFrame.Plain ns.Raised = QtWidgets.QFrame.Raised ns.Sunken = QtWidgets.QFrame.Sunken ns.InstantPopup = QtWidgets.QToolButton.InstantPopup ns.MenuButtonPopup = QtWidgets.QToolButton.MenuButtonPopup ns.AlignTop = QtCore.Qt.AlignTop ns.AlignBottom = QtCore.Qt.AlignBottom ns.AlignLeft = QtCore.Qt.AlignLeft ns.AlignRight = QtCore.Qt.AlignRight ns.AlignHCenter = QtCore.Qt.AlignHCenter ns.AlignVCenter = QtCore.Qt.AlignVCenter ns.AlignCenter = QtCore.Qt.AlignCenter ns.ItemIsUserCheckable = QtCore.Qt.ItemIsUserCheckable ns.ItemIsUserTristate = QtCore.Qt.ItemIsUserTristate ns.Checked = QtCore.Qt.Checked ns.Unchecked = QtCore.Qt.Unchecked ns.PartiallyChecked = QtCore.Qt.PartiallyChecked ns.ReadOnly = QtCore.QFile.ReadOnly ns.Text = QtCore.QFile.Text ns.North = QtWidgets.QTabWidget.North ns.West = QtWidgets.QTabWidget.West ns.East = QtWidgets.QTabWidget.East ns.South = QtWidgets.QTabWidget.South ns.SP_DockWidgetCloseButton = QtWidgets.QStyle.SP_DockWidgetCloseButton ns.LeftArrow = QtCore.Qt.LeftArrow ns.RightArrow = QtCore.Qt.RightArrow ns.UpArrow = QtCore.Qt.UpArrow ns.DownArrow = QtCore.Qt.DownArrow ns.Triangular = QtWidgets.QTabWidget.Triangular ns.NoEcho = QtWidgets.QLineEdit.NoEcho ns.Password = QtWidgets.QLineEdit.Password ns.PasswordEchoOnEdit = QtWidgets.QLineEdit.PasswordEchoOnEdit ns.SolidLine = QtCore.Qt.SolidLine ns.DotLine = QtCore.Qt.DotLine ns.FlatCap = QtCore.Qt.FlatCap ns.SquareCap = QtCore.Qt.SquareCap ns.RoundCap = QtCore.Qt.RoundCap ns.MiterJoin = QtCore.Qt.MiterJoin ns.BevelJoin = QtCore.Qt.BevelJoin ns.RoundJoin = QtCore.Qt.RoundJoin ns.SvgMiterJoin = QtCore.Qt.SvgMiterJoin ns.State_HasFocus = QtWidgets.QStyle.State_HasFocus ns.State_Selected = QtWidgets.QStyle.State_Selected ns.Enter = QtCore.QEvent.Enter ns.Leave = QtCore.QEvent.Leave ns.HoverEnter = QtCore.QEvent.HoverEnter ns.HoverMove = QtCore.QEvent.HoverMove ns.HoverLeave = QtCore.QEvent.HoverLeave ns.MouseButtonPress = QtCore.QEvent.MouseButtonPress ns.MouseButtonRelease = QtCore.QEvent.MouseButtonRelease ns.MouseMove = QtCore.QEvent.MouseMove ns.WindowPalette = QtGui.QPalette.Window ns.PlaceholderText = QtGui.QPalette.PlaceholderText ns.ToolTipBase = QtGui.QPalette.ToolTipBase ns.ToolTipText = QtGui.QPalette.ToolTipText ns.NoTicks = QtWidgets.QSlider.NoTicks ns.TicksAbove = QtWidgets.QSlider.TicksAbove ns.TicksBelow = QtWidgets.QSlider.TicksBelow ns.TicksBothSides = QtWidgets.QSlider.TicksBothSides ns.CC_Slider = QtWidgets.QStyle.CC_Slider ns.SC_SliderHandle = QtWidgets.QStyle.SC_SliderHandle ns.SC_SliderGroove = QtWidgets.QStyle.SC_SliderGroove ns.SP_ArrowBack = QtWidgets.QStyle.SP_ArrowBack ns.SP_ArrowDown = QtWidgets.QStyle.SP_ArrowDown ns.SP_ArrowForward = QtWidgets.QStyle.SP_ArrowForward ns.SP_ArrowLeft = QtWidgets.QStyle.SP_ArrowLeft ns.SP_ArrowRight = QtWidgets.QStyle.SP_ArrowRight ns.SP_ArrowUp = QtWidgets.QStyle.SP_ArrowUp ns.SP_BrowserReload = QtWidgets.QStyle.SP_BrowserReload ns.SP_BrowserStop = QtWidgets.QStyle.SP_BrowserStop ns.SP_CommandLink = QtWidgets.QStyle.SP_CommandLink ns.SP_ComputerIcon = QtWidgets.QStyle.SP_ComputerIcon ns.SP_CustomBase = QtWidgets.QStyle.SP_CustomBase ns.SP_DesktopIcon = QtWidgets.QStyle.SP_DesktopIcon ns.SP_DialogApplyButton = QtWidgets.QStyle.SP_DialogApplyButton ns.SP_DialogCancelButton = QtWidgets.QStyle.SP_DialogCancelButton ns.SP_DialogCloseButton = QtWidgets.QStyle.SP_DialogCloseButton ns.SP_DialogDiscardButton = QtWidgets.QStyle.SP_DialogDiscardButton ns.SP_DialogHelpButton = QtWidgets.QStyle.SP_DialogHelpButton ns.SP_DialogNoButton = QtWidgets.QStyle.SP_DialogNoButton ns.SP_DialogOkButton = QtWidgets.QStyle.SP_DialogOkButton ns.SP_DialogOpenButton = QtWidgets.QStyle.SP_DialogOpenButton ns.SP_DialogResetButton = QtWidgets.QStyle.SP_DialogResetButton ns.SP_DialogSaveButton = QtWidgets.QStyle.SP_DialogSaveButton ns.SP_DialogYesButton = QtWidgets.QStyle.SP_DialogYesButton ns.SP_DirClosedIcon = QtWidgets.QStyle.SP_DirClosedIcon ns.SP_DirHomeIcon = QtWidgets.QStyle.SP_DirHomeIcon ns.SP_DirIcon = QtWidgets.QStyle.SP_DirIcon ns.SP_DirLinkIcon = QtWidgets.QStyle.SP_DirLinkIcon ns.SP_DirLinkOpenIcon = QtWidgets.QStyle.SP_DirLinkOpenIcon ns.SP_DirOpenIcon = QtWidgets.QStyle.SP_DirOpenIcon ns.SP_DockWidgetCloseButton = QtWidgets.QStyle.SP_DockWidgetCloseButton ns.SP_DriveCDIcon = QtWidgets.QStyle.SP_DriveCDIcon ns.SP_DriveDVDIcon = QtWidgets.QStyle.SP_DriveDVDIcon ns.SP_DriveFDIcon = QtWidgets.QStyle.SP_DriveFDIcon ns.SP_DriveHDIcon = QtWidgets.QStyle.SP_DriveHDIcon ns.SP_DriveNetIcon = QtWidgets.QStyle.SP_DriveNetIcon ns.SP_FileDialogBack = QtWidgets.QStyle.SP_FileDialogBack ns.SP_FileDialogContentsView = QtWidgets.QStyle.SP_FileDialogContentsView ns.SP_FileDialogDetailedView = QtWidgets.QStyle.SP_FileDialogDetailedView ns.SP_FileDialogEnd = QtWidgets.QStyle.SP_FileDialogEnd ns.SP_FileDialogInfoView = QtWidgets.QStyle.SP_FileDialogInfoView ns.SP_FileDialogListView = QtWidgets.QStyle.SP_FileDialogListView ns.SP_FileDialogNewFolder = QtWidgets.QStyle.SP_FileDialogNewFolder ns.SP_FileDialogStart = QtWidgets.QStyle.SP_FileDialogStart ns.SP_FileDialogToParent = QtWidgets.QStyle.SP_FileDialogToParent ns.SP_FileIcon = QtWidgets.QStyle.SP_FileIcon ns.SP_FileLinkIcon = QtWidgets.QStyle.SP_FileLinkIcon ns.SP_MediaPause = QtWidgets.QStyle.SP_MediaPause ns.SP_MediaPlay = QtWidgets.QStyle.SP_MediaPlay ns.SP_MediaSeekBackward = QtWidgets.QStyle.SP_MediaSeekBackward ns.SP_MediaSeekForward = QtWidgets.QStyle.SP_MediaSeekForward ns.SP_MediaSkipBackward = QtWidgets.QStyle.SP_MediaSkipBackward ns.SP_MediaSkipForward = QtWidgets.QStyle.SP_MediaSkipForward ns.SP_MediaStop = QtWidgets.QStyle.SP_MediaStop ns.SP_MediaVolume = QtWidgets.QStyle.SP_MediaVolume ns.SP_MediaVolumeMuted = QtWidgets.QStyle.SP_MediaVolumeMuted ns.SP_LineEditClearButton = QtWidgets.QStyle.SP_LineEditClearButton ns.SP_DialogYesToAllButton = QtWidgets.QStyle.SP_DialogYesToAllButton ns.SP_DialogNoToAllButton = QtWidgets.QStyle.SP_DialogNoToAllButton ns.SP_DialogSaveAllButton = QtWidgets.QStyle.SP_DialogSaveAllButton ns.SP_DialogAbortButton = QtWidgets.QStyle.SP_DialogAbortButton ns.SP_DialogRetryButton = QtWidgets.QStyle.SP_DialogRetryButton ns.SP_DialogIgnoreButton = QtWidgets.QStyle.SP_DialogIgnoreButton ns.SP_RestoreDefaultsButton = QtWidgets.QStyle.SP_RestoreDefaultsButton ns.SP_MessageBoxCritical = QtWidgets.QStyle.SP_MessageBoxCritical ns.SP_MessageBoxInformation = QtWidgets.QStyle.SP_MessageBoxInformation ns.SP_MessageBoxQuestion = QtWidgets.QStyle.SP_MessageBoxQuestion ns.SP_MessageBoxWarning = QtWidgets.QStyle.SP_MessageBoxWarning ns.SP_TitleBarCloseButton = QtWidgets.QStyle.SP_TitleBarCloseButton ns.SP_TitleBarContextHelpButton = QtWidgets.QStyle.SP_TitleBarContextHelpButton ns.SP_TitleBarMaxButton = QtWidgets.QStyle.SP_TitleBarMaxButton ns.SP_TitleBarMenuButton = QtWidgets.QStyle.SP_TitleBarMenuButton ns.SP_TitleBarMinButton = QtWidgets.QStyle.SP_TitleBarMinButton ns.SP_TitleBarNormalButton = QtWidgets.QStyle.SP_TitleBarNormalButton ns.SP_TitleBarShadeButton = QtWidgets.QStyle.SP_TitleBarShadeButton ns.SP_TitleBarUnshadeButton = QtWidgets.QStyle.SP_TitleBarUnshadeButton ns.SP_ToolBarHorizontalExtensionButton = QtWidgets.QStyle.SP_ToolBarHorizontalExtensionButton ns.SP_ToolBarVerticalExtensionButton = QtWidgets.QStyle.SP_ToolBarVerticalExtensionButton ns.SP_TrashIcon = QtWidgets.QStyle.SP_TrashIcon ns.SP_VistaShield = QtWidgets.QStyle.SP_VistaShield ns.MessageOk = QtWidgets.QMessageBox.Ok ns.MessageCancel = QtWidgets.QMessageBox.Cancel ns.MessageClose = QtWidgets.QMessageBox.Close ns.MessageOpen = QtWidgets.QMessageBox.Open ns.MessageReset = QtWidgets.QMessageBox.Reset ns.MessageSave = QtWidgets.QMessageBox.Save ns.MessageSaveAll = QtWidgets.QMessageBox.SaveAll ns.MessageRestoreDefaults = QtWidgets.QMessageBox.RestoreDefaults ns.MessageYes = QtWidgets.QMessageBox.Yes ns.MessageHelp = QtWidgets.QMessageBox.Help ns.MessageNo = QtWidgets.QMessageBox.No ns.MessageApply = QtWidgets.QMessageBox.Apply ns.MessageDiscard = QtWidgets.QMessageBox.Discard ns.MessageCritical = QtWidgets.QMessageBox.Critical ns.MessageInformation = QtWidgets.QMessageBox.Information ns.MessageNoIcon = QtWidgets.QMessageBox.NoIcon ns.MessageQuestion = QtWidgets.QMessageBox.Question ns.MessageWarning = QtWidgets.QMessageBox.Warning ns.Shadow_Mask = QtWidgets.QFrame.Shadow_Mask ns.Shape_Mask = QtWidgets.QFrame.Shape_Mask ns.AnyFile = QtWidgets.QFileDialog.AnyFile ns.ExistingFile = QtWidgets.QFileDialog.ExistingFile ns.ExistingFiles = QtWidgets.QFileDialog.ExistingFiles ns.Directory = QtWidgets.QFileDialog.Directory ns.ColorShowAlphaChannel = QtWidgets.QColorDialog.ShowAlphaChannel ns.ColorNoButtons = QtWidgets.QColorDialog.NoButtons ns.ColorDontUseNativeDialog = QtWidgets.QColorDialog.DontUseNativeDialog ns.LCDOutline = QtWidgets.QLCDNumber.Outline ns.LCDFlat = QtWidgets.QLCDNumber.Flat ns.NetworkIcon = QtWidgets.QFileIconProvider.Network ns.FontNoButtons = QtWidgets.QFontDialog.NoButtons ns.FontDontUseNativeDialog = QtWidgets.QFontDialog.DontUseNativeDialog ns.ClassicStyle = QtWidgets.QWizard.ClassicStyle ns.ModernStyle = QtWidgets.QWizard.ModernStyle ns.MacStyle = QtWidgets.QWizard.MacStyle ns.AeroStyle = QtWidgets.QWizard.AeroStyle ns.PlainText = QtCore.Qt.PlainText ns.RichText = QtCore.Qt.RichText ns.AutoText = QtCore.Qt.AutoText ns.MarkdownText = QtCore.Qt.MarkdownText ns.KeepAspectRatio = QtCore.Qt.KeepAspectRatio ns.ScrollBarAsNeeded = QtCore.Qt.ScrollBarAsNeeded ns.ToolButtonIconOnly = QtCore.Qt.ToolButtonIconOnly ns.ToolButtonTextOnly = QtCore.Qt.ToolButtonTextOnly ns.ToolButtonTextBesideIcon = QtCore.Qt.ToolButtonTextBesideIcon ns.ToolButtonTextUnderIcon = QtCore.Qt.ToolButtonTextUnderIcon ns.ToolButtonFollowStyle = QtCore.Qt.ToolButtonFollowStyle ns.FileDontUseNativeDialog = QtWidgets.QFileDialog.DontUseNativeDialog ns.DialogYesRole = QtWidgets.QDialogButtonBox.YesRole ns.DialogOk = QtWidgets.QDialogButtonBox.Ok ns.DialogCancel = QtWidgets.QDialogButtonBox.Cancel ns.HaveHelpButton = QtWidgets.QWizard.HaveHelpButton ns.WatermarkPixmap = QtWidgets.QWizard.WatermarkPixmap ns.LogoPixmap = QtWidgets.QWizard.LogoPixmap ns.BannerPixmap = QtWidgets.QWizard.BannerPixmap ns.BackgroundPixmap = QtWidgets.QWizard.BackgroundPixmap ns.LeftDockWidgetArea = QtCore.Qt.LeftDockWidgetArea ns.AllDockWidgetFeatures = QtWidgets.QDockWidget.AllDockWidgetFeatures ns.DockWidgetVerticalTitleBar = QtWidgets.QDockWidget.DockWidgetVerticalTitleBar ns.InputNoButtons = QtWidgets.QInputDialog.NoButtons ns.TopToBottom = QtWidgets.QProgressBar.TopToBottom ns.BottomToTop = QtWidgets.QProgressBar.BottomToTop ns.Rounded = QtWidgets.QTabWidget.Rounded ns.Triangular = QtWidgets.QTabWidget.Triangular ns.LeftSide = QtWidgets.QTabBar.LeftSide ns.RightSide = QtWidgets.QTabBar.RightSide ns.UseListViewForComboBoxItems = QtWidgets.QInputDialog.UseListViewForComboBoxItems ns.IntInput = QtWidgets.QInputDialog.IntInput ns.DoubleInput = QtWidgets.QInputDialog.DoubleInput ns.RubberBandLine = QtWidgets.QRubberBand.Line ns.RubberBandRectangle = QtWidgets.QRubberBand.Rectangle ns.TextSelectableByMouse = QtCore.Qt.TextSelectableByMouse ns.TextEditorInteraction = QtCore.Qt.TextEditorInteraction ns.Window = QtCore.Qt.Window ns.Dialog = QtCore.Qt.Dialog ns.SubWindow = QtCore.Qt.SubWindow ns.WindowContextHelpButtonHint = QtCore.Qt.WindowContextHelpButtonHint ns.WindowShadeButtonHint = QtCore.Qt.WindowShadeButtonHint ns.FramelessWindowHint = QtCore.Qt.FramelessWindowHint ns.WindowStaysOnTopHint = QtCore.Qt.WindowStaysOnTopHint ns.WindowNoState = QtCore.Qt.WindowNoState ns.WindowMinimized = QtCore.Qt.WindowMinimized ns.WindowMaximized = QtCore.Qt.WindowMaximized ns.WA_Hover = QtCore.Qt.WA_Hover ns.WA_LayoutOnEntireRect = QtCore.Qt.WA_LayoutOnEntireRect ns.WA_LayoutUsesWidgetRect = QtCore.Qt.WA_LayoutUsesWidgetRect ns.ElideLeft = QtCore.Qt.ElideLeft ns.ElideRight = QtCore.Qt.ElideRight ns.ElideMiddle = QtCore.Qt.ElideMiddle ns.ElideNone = QtCore.Qt.ElideNone ns.CrossCursor = QtCore.Qt.CrossCursor ns.SizeVerCursor = QtCore.Qt.SizeVerCursor ns.SizeHorCursor = QtCore.Qt.SizeHorCursor ns.SizeBDiagCursor = QtCore.Qt.SizeBDiagCursor ns.SizeFDiagCursor = QtCore.Qt.SizeFDiagCursor ns.SizeAllCursor = QtCore.Qt.SizeAllCursor ns.WhatsThisCursor = QtCore.Qt.WhatsThisCursor ns.LeftButton = QtCore.Qt.LeftButton ns.RightButton = QtCore.Qt.RightButton ns.SizeFixed = QtWidgets.QSizePolicy.Fixed ns.SizeMinimum = QtWidgets.QSizePolicy.Minimum ns.SizeMaximum = QtWidgets.QSizePolicy.Maximum ns.SizePreferred = QtWidgets.QSizePolicy.Preferred ns.SizeExpanding = QtWidgets.QSizePolicy.Expanding ns.SizeMinimumExpanding = QtWidgets.QSizePolicy.MinimumExpanding ns.SizeIgnored = QtWidgets.QSizePolicy.Ignored ns.SetFixedSize = QtWidgets.QLayout.SetFixedSize return ns def get_colors(args, compat): '''Create shared colors dependent on the stylesheet.''' ns = argparse.Namespace() ns.Background = compat.QtGui.QColor(255, 255, 0) ns.Foreground = compat.QtGui.QColor(0, 255, 255) ns.Selected = compat.QtGui.QColor(61, 174, 233) ns.PlaceholderColor = compat.QtGui.QColor(255, 0, 0) ns.TickColor = compat.QtGui.QColor(255, 0, 0) ns.ToolTipBase = compat.QtGui.QColor(0, 255, 0) ns.ToolTipText = compat.QtGui.QColor(0, 0, 255) ns.MidTone = compat.QtGui.QColor(127, 127, 127) ns.ViewBackground = compat.QtGui.QColor(0, 0, 0) ns.TabBackground = compat.QtGui.QColor(0, 0, 0) if 'dark' in args.stylesheet: ns.Background = compat.QtGui.QColor(49, 54, 59) ns.Foreground = compat.QtGui.QColor(239, 240, 241) ns.GrooveBackground = compat.QtGui.QColor(98, 101, 104) ns.GrooveBorder = compat.QtGui.QColor(49, 54, 59) ns.HandleBackground = compat.QtGui.QColor(29, 32, 35) ns.HandleBorder = compat.QtGui.QColor(98, 101, 104) ns.Notch = compat.QtGui.QColor(51, 78, 94) ns.PlaceholderColor = compat.QtGui.QColor(118, 121, 124) ns.TickColor = compat.QtGui.QColor(51, 78, 94) ns.ToolTipBase = compat.QtGui.QColor(49, 54, 59) ns.ToolTipText = compat.QtGui.QColor(239, 240, 241) ns.MidTone = compat.QtGui.QColor(118, 121, 124) ns.ViewBackground = compat.QtGui.QColor(29, 32, 35) ns.TabBackground = compat.QtGui.QColor(44, 48, 52) elif 'light' in args.stylesheet: ns.Background = compat.QtGui.QColor(239, 240, 241) ns.Foreground = compat.QtGui.QColor(49, 54, 59) ns.GrooveBackground = compat.QtGui.QColor(106, 105, 105, 179) ns.GrooveBorder = compat.QtGui.QColor(239, 240, 241) ns.HandleBackground = compat.QtGui.QColor(239, 240, 241) ns.HandleBorder = compat.QtGui.QColor(106, 105, 105, 179) ns.Notch = compat.QtGui.QColor(61, 173, 232, 51) ns.PlaceholderColor = compat.QtGui.QColor(186, 185, 184) ns.TickColor = compat.QtGui.QColor(61, 173, 232, 51) ns.ToolTipBase = compat.QtGui.QColor(49, 54, 59) ns.ToolTipText = compat.QtGui.QColor(239, 240, 241) ns.MidTone = compat.QtGui.QColor(186, 185, 184) ns.ViewBackground = compat.QtGui.QColor(239, 240, 241) ns.TabBackground = compat.QtGui.QColor(217, 216, 215) return ns def get_icon_map(args, compat): '''Create a map of standard icons to resource paths.''' icon_map = { compat.SP_TitleBarMinButton: 'minimize.svg', compat.SP_TitleBarMenuButton: 'menu.svg', compat.SP_TitleBarMaxButton: 'maximize.svg', compat.SP_TitleBarCloseButton: 'window_close.svg', compat.SP_TitleBarNormalButton: 'restore.svg', compat.SP_TitleBarShadeButton: 'shade.svg', compat.SP_TitleBarUnshadeButton: 'unshade.svg', compat.SP_TitleBarContextHelpButton: 'help.svg', compat.SP_MessageBoxInformation: 'message_information.svg', compat.SP_MessageBoxWarning: 'message_warning.svg', compat.SP_MessageBoxCritical: 'message_critical.svg', compat.SP_MessageBoxQuestion: 'message_question.svg', compat.SP_DesktopIcon: 'desktop.svg', compat.SP_TrashIcon: 'trash.svg', compat.SP_ComputerIcon: 'computer.svg', compat.SP_DriveFDIcon: 'floppy_drive.svg', compat.SP_DriveHDIcon: 'hard_drive.svg', compat.SP_DriveCDIcon: 'disc_drive.svg', compat.SP_DriveDVDIcon: 'disc_drive.svg', compat.SP_DriveNetIcon: 'network_drive.svg', compat.SP_DirHomeIcon: 'home_directory.svg', compat.SP_DirOpenIcon: 'folder_open.svg', compat.SP_DirClosedIcon: 'folder.svg', compat.SP_DirIcon: 'folder.svg', compat.SP_DirLinkIcon: 'folder_link.svg', compat.SP_DirLinkOpenIcon: 'folder_open_link.svg', compat.SP_FileIcon: 'file.svg', compat.SP_FileLinkIcon: 'file_link.svg', compat.SP_FileDialogStart: 'file_dialog_start.svg', compat.SP_FileDialogEnd: 'file_dialog_end.svg', compat.SP_FileDialogToParent: 'up_arrow.svg', compat.SP_FileDialogNewFolder: 'folder.svg', compat.SP_FileDialogDetailedView: 'file_dialog_detailed.svg', compat.SP_FileDialogInfoView: 'file_dialog_info.svg', compat.SP_FileDialogContentsView: 'file_dialog_contents.svg', compat.SP_FileDialogListView: 'file_dialog_list.svg', compat.SP_FileDialogBack: 'left_arrow.svg', compat.SP_DockWidgetCloseButton: 'close.svg', compat.SP_ToolBarHorizontalExtensionButton: 'horizontal_extension.svg', compat.SP_ToolBarVerticalExtensionButton: 'vertical_extension.svg', compat.SP_DialogOkButton: 'dialog_ok.svg', compat.SP_DialogCancelButton: 'dialog_cancel.svg', compat.SP_DialogHelpButton: 'dialog_help.svg', compat.SP_DialogOpenButton: 'dialog_open.svg', compat.SP_DialogSaveButton: 'dialog_save.svg', compat.SP_DialogCloseButton: 'dialog_close.svg', compat.SP_DialogApplyButton: 'dialog_apply.svg', compat.SP_DialogResetButton: 'dialog_reset.svg', compat.SP_DialogDiscardButton: 'dialog_discard.svg', compat.SP_DialogYesButton: 'dialog_apply.svg', compat.SP_DialogNoButton: 'dialog_no.svg', compat.SP_ArrowUp: 'up_arrow.svg', compat.SP_ArrowDown: 'down_arrow.svg', compat.SP_ArrowLeft: 'left_arrow.svg', compat.SP_ArrowRight: 'right_arrow.svg', compat.SP_ArrowBack: 'left_arrow.svg', compat.SP_ArrowForward: 'right_arrow.svg', compat.SP_CommandLink: 'right_arrow.svg', compat.SP_VistaShield: 'vista_shield.svg', compat.SP_BrowserReload: 'browser_refresh.svg', compat.SP_BrowserStop: 'browser_refresh_stop.svg', compat.SP_MediaPlay: 'play.svg', compat.SP_MediaStop: 'stop.svg', compat.SP_MediaPause: 'pause.svg', compat.SP_MediaSkipForward: 'skip_backward.svg', compat.SP_MediaSkipBackward: 'skip_forward.svg', compat.SP_MediaSeekForward: 'seek_forward.svg', compat.SP_MediaSeekBackward: 'seek_backward.svg', compat.SP_MediaVolume: 'volume.svg', compat.SP_MediaVolumeMuted: 'volume_muted.svg', compat.SP_LineEditClearButton: 'clear_text.svg', compat.SP_DialogYesToAllButton: 'dialog_yes_to_all.svg', compat.SP_DialogNoToAllButton: 'dialog_no.svg', compat.SP_DialogSaveAllButton: 'dialog_save_all.svg', compat.SP_DialogAbortButton: 'dialog_cancel.svg', compat.SP_DialogRetryButton: 'dialog_retry.svg', compat.SP_DialogIgnoreButton: 'dialog_ignore.svg', compat.SP_RestoreDefaultsButton: 'restore_defaults.svg', } if compat.QtCore.QT_VERSION >= 393984: icon_map[compat.SP_TabCloseButton] = 'tab_close.svg' return icon_map def setup_app(args, unknown, compat, style_class=None, window_class=None): '''Setup code for the Qt application.''' if args.scale != 1: os.environ['QT_SCALE_FACTOR'] = str(args.scale) else: os.environ['QT_AUTO_SCREEN_SCALE_FACTOR'] = '1' app = compat.QtWidgets.QApplication(sys.argv[:1] + unknown) if args.style != 'native': style = compat.QtWidgets.QStyleFactory.create(args.style) if style_class is not None: style = style_class(style) app.setStyle(style) if window_class is None: window_class = compat.QtWidgets.QMainWindow window = window_class() # use the default font size font = app.font() if args.font_size > 0: font.setPointSizeF(args.font_size) if args.font_family: font.setFamily(args.font_family) app.setFont(font) return app, window def set_stylesheet(args, app, compat): '''Set the application stylesheet.''' if args.stylesheet != 'native': resource_format = get_resources(args) stylesheet = get_stylesheet(resource_format) file = compat.QtCore.QFile(stylesheet) file.open(compat.ReadOnly | compat.Text) stream = compat.QtCore.QTextStream(file) app.setStyleSheet(stream.readAll()) def exec_app(args, app, window, compat): '''Show and execute the Qt application.''' window.show() return execute(args, app) def execute(args, widget, *params): '''Shared code to call `exec()` on a widget.''' if args.pyqt6: return widget.exec(*params) return widget.exec_(*params) def single_point_position(args, event): '''Shared code to call `pos()` on a single-point event.''' if args.pyqt6: # Qt6 returns `QPointF`, which is overkill. return event.position().toPoint() return event.pos() def single_point_global_position(args, event): '''Shared code to call `globalPos()` on a single-point event.''' if args.pyqt6: # Qt6 returns `QPointF`, which is overkill. return event.globalPosition().toPoint() return event.globalPos() def native_icon(style, icon, option=None, widget=None): '''Get a standard icon for the native style''' return style.standardIcon(icon, option, widget) def stylesheet_icon(args, style, icon, icon_map, option=None, widget=None): '''Get a standard icon for the stylesheet style''' if args.pyqt6: from PyQt6 import QtCore, QtGui, QtWidgets else: from PyQt5 import QtCore, QtGui, QtWidgets path = icon_map[icon] resource_format = get_resources(args) resource = f'{resource_format}{path}' if QtCore.QFile.exists(resource): return QtGui.QIcon(resource) return QtWidgets.QCommonStyle.standardIcon(style, icon, option, widget) def style_icon(args, style, icon, icon_map, option=None, widget=None): '''Get the stylized icon, either native or in the stylesheet.''' if args.stylesheet == 'native': return native_icon(style, icon, option, widget) return stylesheet_icon(args, style, icon, icon_map, option, widget) def standard_icon(args, widget, icon, icon_map): '''Simplified wrapper to get a standard icon from a widget.''' return style_icon(args, widget.style(), icon, icon_map, widget=widget)