From f469c588285525ac23d8b55a0542bf0209585dea Mon Sep 17 00:00:00 2001 From: VFX - Visual Effects Date: Fri, 30 Apr 2021 17:40:01 -0300 Subject: [PATCH] 30/04/2021 --- .gitignore | 4 ++ gui/core/json_settings.py | 63 ++++++++++++++++++++++++++ gui/core/json_themes.py | 63 ++++++++++++++++++++++++++ gui/uis/windows/main_window/ui_main.py | 56 +++++++++++++++++++++++ gui/widgets/__init__.py | 23 ++++++++++ gui/widgets/py_window/__init__.py | 19 ++++++++ gui/widgets/py_window/py_window.py | 56 +++++++++++++++++++++++ main.py | 62 +++++++++++++++++++++++++ qt_core.py | 27 +++++++++++ settings.json | 13 ++++++ 10 files changed, 386 insertions(+) create mode 100644 .gitignore create mode 100644 gui/core/json_settings.py create mode 100644 gui/core/json_themes.py create mode 100644 gui/uis/windows/main_window/ui_main.py create mode 100644 gui/widgets/__init__.py create mode 100644 gui/widgets/py_window/__init__.py create mode 100644 gui/widgets/py_window/py_window.py create mode 100644 main.py create mode 100644 qt_core.py create mode 100644 settings.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1553e76 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +__pycache__/ +.vscode/ +.git/ +.pyc \ No newline at end of file diff --git a/gui/core/json_settings.py b/gui/core/json_settings.py new file mode 100644 index 0000000..ae68034 --- /dev/null +++ b/gui/core/json_settings.py @@ -0,0 +1,63 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT PACKAGES AND MODULES +# /////////////////////////////////////////////////////////////// +import json +import os + +# APP SETTINGS +# /////////////////////////////////////////////////////////////// +class Settings(object): + # APP PATH + # /////////////////////////////////////////////////////////////// + json_file = "settings.json" + app_path = os.path.abspath(os.getcwd()) + settings_path = os.path.join(app_path, json_file) + if not os.path.isfile(settings_path): + print(f"WARNING: \"settings.json\" not found! check in the folder {settings_path}") + + # INIT SETTINGS + # /////////////////////////////////////////////////////////////// + def __init__(self): + super(Settings, self).__init__() + + # DICTIONARY WITH SETTINGS + self.items = { + "app_name" : "", + "custom_title_bar" : True, + "startup_size" : [], + "minimum_size" : [], + "theme_name" : "" + } + + # DESERIALIZE + self.deserialize() + + # SERIALIZE JSON + # /////////////////////////////////////////////////////////////// + def serialize(self): + # WRITE JSON FILE + with open(self.settings_path, "w", encoding='utf-8') as write: + json.dump(self.items, write, indent=4) + + # DESERIALIZE JSON + # /////////////////////////////////////////////////////////////// + def deserialize(self): + # READ JSON FILE + with open(self.settings_path, "r", encoding='utf-8') as reader: + settings = json.loads(reader.read()) + self.items = settings \ No newline at end of file diff --git a/gui/core/json_themes.py b/gui/core/json_themes.py new file mode 100644 index 0000000..c5b6535 --- /dev/null +++ b/gui/core/json_themes.py @@ -0,0 +1,63 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT PACKAGES AND MODULES +# /////////////////////////////////////////////////////////////// +import json +import os + +# APP THEMES +# /////////////////////////////////////////////////////////////// +class Settings(object): + # APP PATH + # /////////////////////////////////////////////////////////////// + json_file = "settings.json" + app_path = os.path.abspath(os.getcwd()) + settings_path = os.path.join(app_path, json_file) + if not os.path.isfile(settings_path): + print(f"WARNING: \"settings.json\" not found! check in the folder {settings_path}") + + # INIT SETTINGS + # /////////////////////////////////////////////////////////////// + def __init__(self): + super(Settings, self).__init__() + + # DICTIONARY WITH SETTINGS + self.items = { + "app_name" : "", + "custom_title_bar" : True, + "startup_size" : [], + "minimum_size" : [], + "theme_name" : "" + } + + # DESERIALIZE + self.deserialize() + + # SERIALIZE JSON + # /////////////////////////////////////////////////////////////// + def serialize(self): + # WRITE JSON FILE + with open(self.settings_path, "w", encoding='utf-8') as write: + json.dump(self.items, write, indent=4) + + # DESERIALIZE JSON + # /////////////////////////////////////////////////////////////// + def deserialize(self): + # READ JSON FILE + with open(self.settings_path, "r", encoding='utf-8') as reader: + settings = json.loads(reader.read()) + self.items = settings \ No newline at end of file diff --git a/gui/uis/windows/main_window/ui_main.py b/gui/uis/windows/main_window/ui_main.py new file mode 100644 index 0000000..fc55860 --- /dev/null +++ b/gui/uis/windows/main_window/ui_main.py @@ -0,0 +1,56 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT PACKAGES AND MODULES +# /////////////////////////////////////////////////////////////// +import sys + +# IMPORT QT CORE +# /////////////////////////////////////////////////////////////// +from qt_core import * + +# IMPORT SETTINGS +# /////////////////////////////////////////////////////////////// +from gui.core.json_settings import Settings + +# IMPORT PY ONE DARK WIDGETS +# /////////////////////////////////////////////////////////////// +from gui.widgets import * + +# PY WINDOW +# /////////////////////////////////////////////////////////////// +class UI_MainWindow(object): + def setup_ui(self, parent): + if not parent.objectName(): + parent.setObjectName("MainWindow") + + # LOAD SETTINGS + # /////////////////////////////////////////////////////////////// + settings = Settings() + self.settings = settings.items + + # SET INITIAL PARAMETERS + parent.setMinimumSize(self.settings["startup_size"][0], self.settings["startup_size"][1]) + + # LOAD PY WINDOW CUSTOM WIDGET + # /////////////////////////////////////////////////////////////// + self.window = PyWindow(parent) + + # TEXT + self.label = QLabel(self.settings["app_name"], self.window) + + # ADD CENTRAL WIDGET + parent.setCentralWidget(self.window) \ No newline at end of file diff --git a/gui/widgets/__init__.py b/gui/widgets/__init__.py new file mode 100644 index 0000000..1aa46af --- /dev/null +++ b/gui/widgets/__init__.py @@ -0,0 +1,23 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT WIDGETS +# ADD here all custom widgets +# /////////////////////////////////////////////////////////////// + +# PY WINDOW +# /////////////////////////////////////////////////////////////// +from . py_window import PyWindow \ No newline at end of file diff --git a/gui/widgets/py_window/__init__.py b/gui/widgets/py_window/__init__.py new file mode 100644 index 0000000..43e8283 --- /dev/null +++ b/gui/widgets/py_window/__init__.py @@ -0,0 +1,19 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT WIDGETS +# /////////////////////////////////////////////////////////////// +from . py_window import PyWindow \ No newline at end of file diff --git a/gui/widgets/py_window/py_window.py b/gui/widgets/py_window/py_window.py new file mode 100644 index 0000000..40f15db --- /dev/null +++ b/gui/widgets/py_window/py_window.py @@ -0,0 +1,56 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT PACKAGES AND MODULES +# /////////////////////////////////////////////////////////////// +import sys + +# IMPORT QT CORE +# /////////////////////////////////////////////////////////////// +from qt_core import * + +# IMPORT SETTINGS +# /////////////////////////////////////////////////////////////// +from gui.core.json_settings import Settings + +# PY WINDOW +# /////////////////////////////////////////////////////////////// +class PyWindow(QWidget): + def __init__(self, parent): + super(PyWindow, self).__init__() + + # LOAD SETTINGS + # /////////////////////////////////////////////////////////////// + settings = Settings() + self.settings = settings.items + + # APP MARGINS LAYOUT + # /////////////////////////////////////////////////////////////// + self.app_margins_layout = QVBoxLayout(self) + self.app_margins_layout.setContentsMargins(0,0,0,0) + self.app_margins_layout.setObjectName("app_margins_layout") + + # BG APP + # /////////////////////////////////////////////////////////////// + self.bg_app = QFrame(self) + self.bg_app.setStyleSheet("background: #333") + self.bg_app.setObjectName("bg_app") + + # ADD WIDGETS TO APP MARGINS LAUOUT + # /////////////////////////////////////////////////////////////// + self.app_margins_layout.addWidget(self.bg_app) + + \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..1dff801 --- /dev/null +++ b/main.py @@ -0,0 +1,62 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# IMPORT PACKAGES AND MODULES +# /////////////////////////////////////////////////////////////// +import sys + +# IMPORT QT CORE +# /////////////////////////////////////////////////////////////// +from qt_core import * + +# IMPORT SETTINGS +# /////////////////////////////////////////////////////////////// +from gui.core.json_settings import Settings + +# IMPORT PY ONE DARK WINDOWS +# /////////////////////////////////////////////////////////////// +# MAIN WINDOW +from gui.uis.windows.main_window.ui_main import UI_MainWindow + +# IMPORT PY ONE DARK WIDGETS +# /////////////////////////////////////////////////////////////// +from gui.widgets import * + +# MAIN WINDOW +# /////////////////////////////////////////////////////////////// +class MainWindow(QMainWindow): + def __init__(self): + QMainWindow.__init__(self) + # SETUP MAIN WINDOw + # Load widgets from "gui\uis\main_window\ui_main.py" + # /////////////////////////////////////////////////////////////// + self.ui = UI_MainWindow() + self.ui.setup_ui(self) + + + # SHOW MAIN WINDOW + # /////////////////////////////////////////////////////////////// + self.show() + +# SETTINGS WHEN TO START +# Set the initial class and also additional parameters of the "QApplication" class +# /////////////////////////////////////////////////////////////// +if __name__ == "__main__": + # APPLICATION + app = QApplication(sys.argv) + # app.setWindowIcon(QIcon("icon.ico")) + window = MainWindow() + sys.exit(app.exec_()) \ No newline at end of file diff --git a/qt_core.py b/qt_core.py new file mode 100644 index 0000000..957ac90 --- /dev/null +++ b/qt_core.py @@ -0,0 +1,27 @@ +# /////////////////////////////////////////////////////////////// +# +# BY: WANDERSON M.PIMENTA +# PROJECT MADE WITH: Qt Designer and PySide6 +# V: 1.0.0 +# +# This project can be used freely for all uses, as long as they maintain the +# respective credits only in the Python scripts, any information in the visual +# interface (GUI) can be modified without any implication. +# +# There are limitations on Qt licenses if you want to use your products +# commercially, I recommend reading them on the official website: +# https://doc.qt.io/qtforpython/licenses.html +# +# /////////////////////////////////////////////////////////////// + +# QT CORE +# Change for PySide Or PyQt +# ///////////////////////// WARNING: //////////////////////////// +# Remember that changing to PyQt too many modules will have +# problems because some classes have different names like: +# Property (pyqtProperty), Slot (pyqtSlot), Signal (pyqtSignal) +# among others. +# /////////////////////////////////////////////////////////////// +from PySide6.QtCore import * +from PySide6.QtGui import * +from PySide6.QtWidgets import * diff --git a/settings.json b/settings.json new file mode 100644 index 0000000..3721ec0 --- /dev/null +++ b/settings.json @@ -0,0 +1,13 @@ +{ + "app_name": "PyOneDark - Modern GUI", + "custom_title_bar": true, + "startup_size": [ + 1200, + 720 + ], + "minimum_size": [ + 960, + 540 + ], + "theme_name": "default" +} \ No newline at end of file