import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QToolBar, QAction, QTabWidget, QGridLayout from PyQt5.QtCore import Qt from PyQt5.QtGui import QIcon from utils.DBModels.BaseModel import * from model.ClientModel.Client import Client from UI.DeviceWidget import DeviceWidget from model.ProjectModel.DeviceManage import DevicesManange class CommonHelper: def __init__(self): pass @staticmethod def readQss(style): with open(style,"r") as f: return f.read() class MainWindow(QMainWindow): def __init__(self): super().__init__() self.devicesManange = DevicesManange() self.initUI() def initUI(self): self.toolbar = QToolBar() self.addToolBar(self.toolbar) self.startProtocolBtn = QAction("开始通讯", self) self.startProtocolBtn.setObjectName("startProtocolBtn") self.startProtocolBtn.triggered.connect(self.startProtocol) self.loadProjectBtn = QAction('导入工程', self) self.loadProjectBtn.setObjectName("loadProjectBtn") self.loadProjectBtn.triggered.connect(self.loadProject) self.toolbar.addAction(self.loadProjectBtn) self.toolbar.addAction(self.startProtocolBtn) dpMasterDockWidget = QDockWidget('DP主站') dpMasterDockWidget.setWidget(DeviceWidget(dpMasterDockWidget, self.devicesManange)) dpMasterDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore dpSlaveDockWidget = QDockWidget('DP从站') dpSlaveDockWidget.setWidget(DeviceWidget(dpSlaveDockWidget, self.devicesManange)) dpSlaveDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore paMasterDockWidget = QDockWidget('PA主站') paMasterDockWidget.setWidget(DeviceWidget(paMasterDockWidget, self.devicesManange)) paMasterDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore paSlaveDockWidget = QDockWidget('PA从站') paSlaveDockWidget.setWidget(DeviceWidget(paSlaveDockWidget, self.devicesManange)) paSlaveDockWidget.setFeatures(QDockWidget.DockWidgetMovable | QDockWidget.DockWidgetFloatable) # type: ignore self.addDockWidget(Qt.TopDockWidgetArea, dpMasterDockWidget) # type: ignore self.addDockWidget(Qt.TopDockWidgetArea, dpSlaveDockWidget) # type: ignore self.addDockWidget(Qt.BottomDockWidgetArea, paMasterDockWidget) # type: ignore self.addDockWidget(Qt.BottomDockWidgetArea, paSlaveDockWidget) # type: ignore self.setWindowIcon(QIcon('Static/zhjt.ico')) self.setWindowTitle("PROFIBUS") self.showMaximized() def startProtocol(self): dockWidgets = self.findChildren(QDockWidget) #找到四个dockWidget窗口 for dockWidget in dockWidgets: deviceTabWidgets = dockWidget.findChildren(QTabWidget, 'deviceTabWidget') #判断四个窗口里是否有deviceTabWidget for deviceTabWidget in deviceTabWidgets: areaTabWidgets = deviceTabWidget.findChildren(QTabWidget, 'areaTabWidget') for areaTabWidget in areaTabWidgets: leftLayout = areaTabWidget.currentWidget().layout().itemAt(0) if isinstance(leftLayout,QGridLayout): masterAndSlave = dockWidget.windowTitle()[2:5] dataType = leftLayout.itemAtPosition(0,1).widget().currentText() dataTypeAndModel = masterAndSlave + dataType if dataTypeAndModel in ['主站AI', '主站DI', '从站AO', '从站DO']: curIndex = areaTabWidget.currentIndex() buttonlayoutWidget = areaTabWidget.currentWidget().layout().itemAt(2).itemAtPosition(0,0).widget()#获取buttonlayout buttonlayoutWidget.readValues(deviceName = deviceName, curIndex = curIndex) def loadProject(self): pass if __name__ == '__main__': app = QApplication(sys.argv) Client.initDB() window = MainWindow() window.show() sys.exit(app.exec_())