class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.title = 'TacOS' self._mainUI = MainUI() self._mainUI.setParent(self) self.setStyleSheet(open(Config.css, 'rt').read()) self.setCentralWidget(self._mainUI) self._dock = QDockWidget(self) self._dock.setTitleBarWidget(QWidget()) self._dock.setFloating(True) self._dock.setGeometry(0, 0, 800, 480) self._osk = OSK(rWidget=None) self._osk.setParent(self._dock) self._dock.setWidget(self._osk) self.addDockWidget(Qt.BottomDockWidgetArea, self._dock) self._dock.hide() self.initUI() def initUI(self): self.setWindowTitle(self.title) self.setGeometry(Config.geometry[0], Config.geometry[1], Config.geometry[2], Config.geometry[3]) if pickle.load(open(Config.prefs, 'rb'))['startMaximized']: self.showFullScreen() else: self.show() @property def dock(self): return self._dock @property def osk(self): return self._osk
def __init__(self, ClassObject): super(QMainWindow, self).__init__() w = ClassObject() w.app_main_window = self self._widget = w if len(w.mainmenu) > 0: w._mainmenu = self.__initMainMenu(w.mainmenu) w.init_form() if _api.USED_API == _api.QT_API_PYQT5: self.layout().setContentsMargins(conf.PYFORMS_MAINWINDOW_MARGIN, conf.PYFORMS_MAINWINDOW_MARGIN, conf.PYFORMS_MAINWINDOW_MARGIN, conf.PYFORMS_MAINWINDOW_MARGIN) elif _api.USED_API == _api.QT_API_PYQT4: self.layout().setMargin(conf.PYFORMS_MAINWINDOW_MARGIN) self.setCentralWidget(w) self.setWindowTitle(w.title) docks = {} for name, item in w.controls.items(): if isinstance(item, ControlDockWidget): if item.side not in docks: docks[item.side] = [] docks[item.side].append((name, item)) #Construct the toolbar if len(w.toolbar) > 0: tb = QToolBar(self) self.addToolBar(tb) for item in w.toolbar: if isinstance(item, str) and item in ['|', '-']: tb.addSeparator() else: tb.addWidget(item.form) for key, widgets in docks.items(): side = QtCore.Qt.RightDockWidgetArea if key == 'left': side = QtCore.Qt.LeftDockWidgetArea elif key == 'right': side = QtCore.Qt.RightDockWidgetArea elif key == 'top': side = QtCore.Qt.TopDockWidgetArea elif key == 'bottom': side = QtCore.Qt.BottomDockWidgetArea else: side = QtCore.Qt.LeftDockWidgetArea if isinstance(widgets, list): widgets = sorted(widgets, key=lambda x: x[1].order) for name, widget in widgets: dock = QDockWidget(self) dock.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable) dock.setObjectName(name) if _api.USED_API == _api.QT_API_PYQT5: dock.setContentsMargins(0, 0, 0, 0) widget.form.layout().setContentsMargins( widget.margin, widget.margin, widget.margin, widget.margin) elif _api.USED_API == _api.QT_API_PYQT4: dock.setMargin(0) widget.form.layout().setMargin(widget.margin) # print dock.objectName(),1 dock.setWidget(widget.form) dock.setWindowTitle(widget.label) widget.dock = dock if not widget._show: dock.hide() self.addDockWidget(side, dock) else: dock = QDockWidget(self) dock.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetClosable | QDockWidget.DockWidgetMovable) # dock.setAllowedAreas(QtCore.Qt.LeftDockWidgetArea | QtCore.Qt.RightDockWidgetArea) if _api.USED_API == _api.QT_API_PYQT5: widget.form.layout().setContentsMargins( widget.margin, widget.margin, widget.margin, widget.margin) elif _api.USED_API == _api.QT_API_PYQT5: widget.form.layout().setMargin(widget.margin) # print dock.objectName(), 2 dock.setObjectName(name) dock.setWidget(widget.form) self.addDockWidget(side, dock) dock.setWindowTitle(widget.label) widget.dock = dock if not widget._show: dock.hide() if conf.PYFORMS_STYLESHEET: stylesheet_files = [conf.PYFORMS_STYLESHEET] p = platform.system() if p == 'Windows' and conf.PYFORMS_STYLESHEET_WINDOWS: stylesheet_files.append(conf.PYFORMS_STYLESHEET_WINDOWS) elif p == 'Darwin' and conf.PYFORMS_STYLESHEET_DARWIN: stylesheet_files.append(conf.PYFORMS_STYLESHEET_DARWIN) elif p == 'Linux' and conf.PYFORMS_STYLESHEET_LINUX: stylesheet_files.append(conf.PYFORMS_STYLESHEET_LINUX) logger.debug('Import stylesheets: {0}'.format(stylesheet_files)) self.loadStyleSheetFile(stylesheet_files)