2022-05-15 13:08:14 -05:00

217 lines
6.8 KiB
Python

import os
import sys
import logging
from multiprocessing import freeze_support
if '--pyside2' in sys.argv:
from PySide2.QtWidgets import QApplication, QMainWindow, QFileDialog
from PySide2.QtCore import QTimer, Qt, QCoreApplication
from PySide2.QtGui import QIcon
from PySide2.QtUiTools import QUiLoader
elif '--pyside6' in sys.argv:
from PySide6.QtWidgets import QApplication, QMainWindow, QFileDialog
from PySide6.QtCore import QTimer, Qt, QCoreApplication
from PySide6.QtGui import QIcon, QPixmap
from PySide6.QtUiTools import QUiLoader
from __feature__ import snake_case, true_property
elif '--pyqt5' in sys.argv:
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5.QtCore import QTimer, Qt, QCoreApplication
from PyQt5 import uic, QtWebEngineWidgets
from PyQt5.QtGui import QIcon
elif '--pyqt6' in sys.argv:
from PyQt6.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt6.QtCore import QTimer, Qt, QCoreApplication
from PyQt6.QtGui import QIcon
from PyQt6 import uic, QtWebEngineWidgets
from qt_material import apply_stylesheet, QtStyleTools, density
if hasattr(Qt, 'AA_ShareOpenGLContexts'):
try:
QCoreApplication.setAttribute(Qt.AA_ShareOpenGLContexts)
except:
QCoreApplication.set_attribute(Qt.AA_ShareOpenGLContexts)
else:
print("'Qt' object has no attribute 'AA_ShareOpenGLContexts'")
app = QApplication([])
freeze_support()
try:
app.processEvents()
app.setQuitOnLastWindowClosed(False)
app.lastWindowClosed.connect(app.quit)
except:
app.process_events()
app.quit_on_last_window_closed = False
app.lastWindowClosed.connect(app.quit)
# Extra stylesheets
extra = {
# Button colors
'danger': '#dc3545',
'warning': '#ffc107',
'success': '#17a2b8',
# Font
'font_family': 'Roboto',
# Density
'density_scale': '0',
# Button Shape
'button_shape': 'default',
}
# extra['QMenu'] = {
# 'height': 50,
# 'padding': '50px 50px 50px 50px', # top, right, bottom, left
# }
########################################################################
class RuntimeStylesheets(QMainWindow, QtStyleTools):
# ----------------------------------------------------------------------
def __init__(self):
"""Constructor"""
super().__init__()
if '--pyside2' in sys.argv:
self.main = QUiLoader().load('main_window.ui', self)
wt = 'PySide2'
elif '--pyside6' in sys.argv:
self.main = QUiLoader().load('main_window.ui', self)
wt = 'PySide6'
elif '--pyqt5' in sys.argv:
self.main = uic.loadUi('main_window.ui', self)
wt = 'PyQt5'
elif '--pyqt6' in sys.argv:
self.main = uic.loadUi('main_window.ui', self)
wt = 'PyQt6'
else:
logging.error(
'must include --pyside2, --pyside6 or --pyqt5 in args!'
)
sys.exit()
try:
self.main.setWindowTitle(f'{self.main.windowTitle()} - {wt}')
except:
self.main.window_title = f'{self.main.window_title} - {wt}'
self.custom_styles()
self.set_extra(extra)
self.add_menu_theme(self.main, self.main.menuStyles)
self.add_menu_density(self.main, self.main.menuDensity)
self.show_dock_theme(self.main)
logo = QIcon("qt_material:/logo/logo.svg")
logo_frame = QIcon("qt_material:/logo/logo_frame.svg")
try:
self.main.setWindowIcon(logo)
self.main.actionToolbar.setIcon(logo)
[
self.main.listWidget_2.item(i).setIcon(logo_frame)
for i in range(self.main.listWidget_2.count())
]
except:
self.main.window_icon = logo
self.main.actionToolbar.icon = logo
[
setattr(self.main.listWidget_2.item(i), 'icon', logo_frame)
for i in range(self.main.listWidget_2.count)
]
if hasattr(QFileDialog, 'getExistingDirectory'):
self.main.pushButton_file_dialog.clicked.connect(
lambda: QFileDialog.getOpenFileName(self.main)
)
self.main.pushButton_folder_dialog.clicked.connect(
lambda: QFileDialog.getExistingDirectory(self.main)
)
else:
self.main.pushButton_file_dialog.clicked.connect(
lambda: QFileDialog.get_open_file_name(self.main)
)
self.main.pushButton_folder_dialog.clicked.connect(
lambda: QFileDialog.get_existing_directory(self.main)
)
# ----------------------------------------------------------------------
def custom_styles(self):
""""""
for i in range(self.main.toolBar_vertical.layout().count()):
try:
tool_button = (
self.main.toolBar_vertical.layout().itemAt(i).widget()
)
tool_button.setMaximumWidth(150)
tool_button.setMinimumWidth(150)
except:
tool_button = (
self.main.toolBar_vertical.layout().item_at(i).widget()
)
tool_button.maximum_width = 150
tool_button.minimum_width = 150
try:
for r in range(self.main.tableWidget.rowCount()):
self.main.tableWidget.setRowHeight(r, 36)
for r in range(self.main.tableWidget_2.rowCount()):
self.main.tableWidget_2.setRowHeight(r, 36)
except:
for r in range(self.main.tableWidget.row_count):
self.main.tableWidget.set_row_height(r, 36)
for r in range(self.main.tableWidget_2.row_count):
self.main.tableWidget_2.set_row_height(r, 36)
T0 = 1000
if __name__ == "__main__":
# ----------------------------------------------------------------------
def take_screenshot():
pixmap = frame.main.grab()
pixmap.save(os.path.join('screenshots', f'{theme}.png'))
print(f'Saving {theme}')
if len(sys.argv) > 2:
theme = sys.argv[2]
try:
QTimer.singleShot(T0, take_screenshot)
QTimer.singleShot(T0 * 2, app.closeAllWindows)
except:
QTimer.single_shot(T0, take_screenshot)
QTimer.single_shot(T0 * 2, app.closeAllWindows)
else:
theme = 'default'
# Set theme on in itialization
apply_stylesheet(
app,
theme + '.xml',
invert_secondary=('light' in theme and 'dark' not in theme),
extra=extra,
)
frame = RuntimeStylesheets()
try:
frame.main.showMaximized()
except:
frame.main.show_maximized()
if hasattr(app, 'exec'):
app.exec()
else:
app.exec_()