modbus_test/gui/init.py

103 lines
2.8 KiB
Python

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QColor, QPalette
from gui.robot import ChangeRobot
from gui.status import Status
from gui.imitator import Imitator
from gui.visualize import Visualize
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.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)
imitatorArgs = kwargs.get("imitatorPanel", {})
self.imitatorPanel = Imitator(**imitatorArgs)
self.rightPanel = MyPanel(
panels=[
self.statusPanel,
self.robotPanel,
self.imitatorPanel,
],
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, 600)
self.initUI()
def initUI(self):
palette = QPalette()
palette.setColor(QPalette.Background, 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.imitatorPanel,
]
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_())