Beispiel #1
0
    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)