111 lines
3.1 KiB
Python
111 lines
3.1 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 RightPanel(QWidget):
|
|
def __init__(self, panels):
|
|
super().__init__()
|
|
layout = QVBoxLayout()
|
|
for panel in panels:
|
|
layout.addWidget(panel)
|
|
self.setLayout(layout)
|
|
self.initUI()
|
|
|
|
def initUI(self):
|
|
palette = self.palette()
|
|
palette.setColor(QPalette.Window, QColor(169, 169, 169)) # DarkGray
|
|
self.setAutoFillBackground(True)
|
|
self.setPalette(palette)
|
|
|
|
|
|
class MainPanel(QWidget):
|
|
def __init__(self, panels):
|
|
super().__init__()
|
|
layout = QVBoxLayout()
|
|
for panel in panels:
|
|
layout.addWidget(panel)
|
|
self.initUI()
|
|
|
|
def initUI(self):
|
|
palette = self.palette()
|
|
palette.setColor(QPalette.Window, QColor(255, 255, 255)) # White
|
|
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 = RightPanel(
|
|
panels=[
|
|
self.statusPanel,
|
|
self.robotPanel,
|
|
self.imitatorPanel,
|
|
]
|
|
)
|
|
|
|
visArgs = kwargs.get("visPanel", {})
|
|
self.visPanel = Visualize(**visArgs)
|
|
self.mainPanel = MainPanel(
|
|
panels=[
|
|
self.visPanel,
|
|
]
|
|
)
|
|
|
|
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, self.visPanel]
|
|
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_())
|