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.palletizingPanel, self.commandPanel, ], 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_())