modbus_test/gui/init.py

127 lines
3.7 KiB
Python

import sys
from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QColor, QPalette
from gui.robot import ChangeRobot
from gui.filename import ChangeFile
from gui.status import Status
from gui.informer import Informer
from gui.imitator import Imitator
from gui.command import Command
from gui.visualize import Visualize
from gui.palletizing import Palletizing
from gui.observable import Observable
from logger import logger
class MyPanel(QWidget):
def __init__(self, panels, color):
super().__init__()
layout = QVBoxLayout()
for panel in panels:
layout.addWidget(panel)
self.color = QColor(*color)
self.setLayout(layout)
self.initUI()
def initUI(self):
palette = self.palette()
palette.setColor(QPalette.ColorRole.Window, self.color)
self.setAutoFillBackground(True)
self.setPalette(palette)
class MainContentComponent(QWidget):
def __init__(self, **kwargs):
super().__init__()
self.observable = Observable(kwargs.get("get_status"))
self.observable.value_changed.connect(self.handle_value_change)
robotArgs = kwargs.get("robotPanel", {})
self.robotPanel = ChangeRobot(**robotArgs)
statusArgs = kwargs.get("statusPanel", {})
self.statusPanel = Status(**statusArgs)
informerArgs = kwargs.get("informerPanel", {})
self.informerPanel = Informer(**informerArgs)
filenameArgs = kwargs.get("filenamePanel", {})
self.filenamePanel = ChangeFile(**filenameArgs)
imitatorArgs = kwargs.get("imitatorPanel", {})
self.imitatorPanel = Imitator(**imitatorArgs)
commandArgs = kwargs.get("commandPanel", {})
self.commandPanel = Command(**commandArgs)
palletizingArgs = kwargs.get("palletizingPanel", {})
self.palletizingPanel = Palletizing(**palletizingArgs)
self.rightPanel = MyPanel(
panels=[
# self.statusPanel,
self.robotPanel,
self.informerPanel,
# self.filenamePanel,
# self.imitatorPanel,
# self.commandPanel,
self.palletizingPanel,
],
color=(169, 169, 169),
)
visArgs = kwargs.get("visPanel", {})
self.visPanel = Visualize(**visArgs)
self.mainPanel = MyPanel(
panels=[
self.visPanel,
],
color=(200, 200, 200),
)
layout = QHBoxLayout()
layout.addWidget(self.mainPanel)
layout.addWidget(self.rightPanel)
self.setLayout(layout)
self.setFixedSize(800, 800)
self.initUI()
def initUI(self):
palette = QPalette()
palette.setColor(QPalette.ColorRole.Window, QColor(240, 240, 240))
self.setPalette(palette)
def resizeEvent(self, event):
width = self.width()
rightPanelWidth = int(width * 0.25)
self.rightPanel.setFixedWidth(rightPanelWidth)
super().resizeEvent(event)
def handle_value_change(self, new_value):
panels = [
self.informerPanel,
self.filenamePanel,
self.imitatorPanel,
self.commandPanel,
self.palletizingPanel,
]
for p in panels:
if new_value == "not_connected":
p.setDisabled(True)
if new_value == "connected":
p.setDisabled(False)
if __name__ == "__main__":
app = QApplication(sys.argv)
mainWindow = MainContentComponent(
robotPanel={"arg1": "value1"}, statusPanel={"arg1": "value1"}
)
mainWindow.show()
sys.exit(app.exec_())