Add basic things
This commit is contained in:
parent
2d1bd8636f
commit
6e3678509f
25
app/init.py
Normal file
25
app/init.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
''' app/init.py '''
|
||||||
|
import sys
|
||||||
|
from PyQt6.QtWidgets import QApplication
|
||||||
|
from .ui.main_window import MainWindow
|
||||||
|
from .utils.config import AppConfig
|
||||||
|
from cpdctrl.utility.config_file import ConfigFile
|
||||||
|
|
||||||
|
|
||||||
|
def run() -> int:
|
||||||
|
"""
|
||||||
|
Initializes the application and runs it.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
int: The exit status code.
|
||||||
|
"""
|
||||||
|
app: QApplication = QApplication(sys.argv)
|
||||||
|
AppConfig.initialize()
|
||||||
|
cf = ConfigFile(AppConfig.MAIN_CFG)
|
||||||
|
print(cf.values)
|
||||||
|
cf.set("key", "value")
|
||||||
|
|
||||||
|
window: MainWindow = MainWindow()
|
||||||
|
window.show()
|
||||||
|
cf.save()
|
||||||
|
return sys.exit(app.exec())
|
124
app/ui/main_window.py
Normal file
124
app/ui/main_window.py
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
''' app/ui/main_window.py '''
|
||||||
|
from PyQt6.QtCore import Qt
|
||||||
|
from PyQt6.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QTextEdit, QLabel
|
||||||
|
from ..utils.config import AppConfig
|
||||||
|
from .widgets.menubar import MenuBar
|
||||||
|
from .widgets.toolbar import ToolBar
|
||||||
|
from .widgets.statusbar import StatusBar
|
||||||
|
from .widgets.metadata_input import MetadataInput
|
||||||
|
from .widgets.plot import Plot
|
||||||
|
# from .widgets.treeview import TreeView
|
||||||
|
|
||||||
|
|
||||||
|
class MainWindow(QMainWindow):
|
||||||
|
"""
|
||||||
|
MainWindow
|
||||||
|
|
||||||
|
Args:
|
||||||
|
QMainWindow (QMainWindow): Inheritance
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self) -> None:
|
||||||
|
"""
|
||||||
|
Initialize the Main-Window.
|
||||||
|
"""
|
||||||
|
super().__init__()
|
||||||
|
# Window-Settings
|
||||||
|
self.setWindowTitle(AppConfig.APP_NAME)
|
||||||
|
self.setGeometry(100, 100, 800, 600)
|
||||||
|
central_widget = QWidget(self)
|
||||||
|
self.setCentralWidget(central_widget)
|
||||||
|
|
||||||
|
layout = QHBoxLayout(central_widget)
|
||||||
|
central_widget.setLayout(layout)
|
||||||
|
|
||||||
|
# Create Widgets
|
||||||
|
# self.treeview = self.create_treeview()
|
||||||
|
self.editbox = self.create_edit()
|
||||||
|
|
||||||
|
self.create_toolbars()
|
||||||
|
|
||||||
|
# Add Widgets to Window
|
||||||
|
self.setMenuBar(MenuBar(self))
|
||||||
|
self.setStatusBar(StatusBar(self))
|
||||||
|
|
||||||
|
# layout.addWidget(self.treeview)
|
||||||
|
layout.addWidget(self.editbox, stretch=1)
|
||||||
|
layout.addWidget(self.editbox)
|
||||||
|
|
||||||
|
init_elements = [("name1", "val1"), ("name2", "val2")]
|
||||||
|
layout.addWidget(MetadataInput(init_elements))
|
||||||
|
layout.addWidget(Plot())
|
||||||
|
|
||||||
|
def create_toolbars(self) -> None:
|
||||||
|
"""
|
||||||
|
Creates and adds the top and right toolbars to the main window.
|
||||||
|
"""
|
||||||
|
# Top Toolbar [PyQt6.QtWidgets.QToolBar]
|
||||||
|
self.topbar = ToolBar(self, orientation=Qt.Orientation.Horizontal,
|
||||||
|
style=Qt.ToolButtonStyle.ToolButtonTextUnderIcon, icon_size=(24, 24))
|
||||||
|
|
||||||
|
# Top Toolbar Buttons
|
||||||
|
self.topbar.add_button(
|
||||||
|
"Open", "resources/assets/icons/windows/imageres-10.ico", self.open_file)
|
||||||
|
self.topbar.add_button(
|
||||||
|
"Save", "resources/assets/icons/windows/shell32-259.ico", self.save_file)
|
||||||
|
self.topbar.add_separator()
|
||||||
|
self.topbar.add_button(
|
||||||
|
"Exit", "resources/assets/icons/windows/shell32-220.ico", self.exit_app)
|
||||||
|
|
||||||
|
# Right Toolbar [PyQt6.QtWidgets.QToolBar]
|
||||||
|
self.rightbar = ToolBar(self, orientation=Qt.Orientation.Vertical,
|
||||||
|
style=Qt.ToolButtonStyle.ToolButtonIconOnly,
|
||||||
|
icon_size=(24, 24))
|
||||||
|
|
||||||
|
# Right Toolbar Buttons
|
||||||
|
self.rightbar.add_separator()
|
||||||
|
self.rightbar.add_button(
|
||||||
|
"Privacy", "resources/assets/icons/windows/shell32-167.ico", self.privacy_window)
|
||||||
|
self.rightbar.add_button(
|
||||||
|
"Settings", "resources/assets/icons/windows/shell32-315.ico", self.settings_window)
|
||||||
|
|
||||||
|
self.addToolBar(Qt.ToolBarArea.TopToolBarArea, self.topbar)
|
||||||
|
self.addToolBar(Qt.ToolBarArea.RightToolBarArea, self.rightbar)
|
||||||
|
|
||||||
|
# def create_treeview(self) -> TreeView:
|
||||||
|
"""
|
||||||
|
Creates and adds the tree view widget to the main window.
|
||||||
|
"""
|
||||||
|
# return TreeView(self)
|
||||||
|
|
||||||
|
def create_edit(self) -> QTextEdit:
|
||||||
|
"""
|
||||||
|
Creates and adds the QTextEdit widget to the main window.
|
||||||
|
"""
|
||||||
|
return QTextEdit(self)
|
||||||
|
|
||||||
|
def open_file(self) -> None:
|
||||||
|
"""
|
||||||
|
Event handler for the "Open" button. Displays the "Open File" dialog.
|
||||||
|
"""
|
||||||
|
print("Open")
|
||||||
|
|
||||||
|
def save_file(self) -> None:
|
||||||
|
"""
|
||||||
|
Event handler for the "Save" button. Displays the "Save File" dialog.
|
||||||
|
"""
|
||||||
|
print("Save")
|
||||||
|
|
||||||
|
def exit_app(self) -> None:
|
||||||
|
"""
|
||||||
|
Event handler for the "Exit" button. Closes the application.
|
||||||
|
"""
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def settings_window(self) -> None:
|
||||||
|
"""
|
||||||
|
Event handler for the "Settings" button. Displays the "Settings" window.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def privacy_window(self) -> None:
|
||||||
|
"""
|
||||||
|
Event handler for the "Privacy" button. Displays the "Privacy" window.
|
||||||
|
"""
|
||||||
|
print("privacy_window")
|
@ -0,0 +1,18 @@
|
|||||||
|
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QLabel, QLineEdit, QSpacerItem
|
||||||
|
|
||||||
|
class MetadataInput(QWidget):
|
||||||
|
def __init__(self, elements: list[tuple[str, str]]=None):
|
||||||
|
super().__init__()
|
||||||
|
self.layout = QVBoxLayout()
|
||||||
|
self.elements = []
|
||||||
|
if elements is not None:
|
||||||
|
for (n, v) in elements:
|
||||||
|
self.addElement(n, v)
|
||||||
|
self.layout.addStretch()
|
||||||
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
|
def addElement(self, name, init_val=""):
|
||||||
|
self.elements.append((name, init_val))
|
||||||
|
self.layout.addWidget(QLabel(name))
|
||||||
|
self.layout.addWidget(QLineEdit(init_val))
|
||||||
|
self.layout.addItem(QSpacerItem(0, 1))
|
@ -0,0 +1,19 @@
|
|||||||
|
import pyqtgraph as pg
|
||||||
|
from PyQt6.QtWidgets import QWidget
|
||||||
|
|
||||||
|
class Plot(pg.PlotWidget):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.setBackground("w")
|
||||||
|
self.setTitle("Test")
|
||||||
|
self.setLabel("bottom", "time [s]")
|
||||||
|
self.setLabel("left", "Voltage [V]")
|
||||||
|
self.setLabel("right", "LED [%]")
|
||||||
|
self.showGrid(x=True, y=True)
|
||||||
|
self.time = list(range(10))
|
||||||
|
self.voltage = list(range(10))
|
||||||
|
self.led = list(range(-10))
|
||||||
|
self.line = self.plot(
|
||||||
|
self.time,
|
||||||
|
self.voltage
|
||||||
|
)
|
25
app/utils/config.py
Normal file
25
app/utils/config.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
''' app/utils/config.py '''
|
||||||
|
|
||||||
|
from os import path, environ
|
||||||
|
|
||||||
|
|
||||||
|
class AppConfig:
|
||||||
|
"""
|
||||||
|
Configuration File
|
||||||
|
"""
|
||||||
|
APP_NAME: str = "cpdctrl-gui"
|
||||||
|
CONFIG_DIR: str = path.expanduser("~/.config/cpdctrl")
|
||||||
|
MAIN_CFG: str = ""
|
||||||
|
@classmethod
|
||||||
|
def initialize(cls) -> None:
|
||||||
|
"""
|
||||||
|
Perform any necessary initializations here, e.g.:
|
||||||
|
- Loading settings from a file
|
||||||
|
"""
|
||||||
|
if 'XDG_CONFIG_HOME' in environ.keys():
|
||||||
|
AppConfig.CONFIG_DIR = path.join(environ["XDG_CONFIG_HOME"], "cpdctrl")
|
||||||
|
AppConfig.MAIN_CFG = path.join(AppConfig.CONFIG_DIR, "cpdctrl-gui.yaml")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user