Exemple #1
0
class SubWin(QMainWindow):
    count = 0
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)
        self.toolBar = QToolBar()
        self.addToolBar(self.toolBar)
        self.toolBar.addAction("新建")
        self.toolBar.addAction("级联")
        self.toolBar.addAction("平铺")
        self.toolBar.addAction("关闭全部")
        self.toolBar.addAction("关闭活动窗口")
        self.toolBar.addAction("测试")
        self.toolBar.actionTriggered[QAction].connect(self.windowaction)
        bar = self.menuBar()
        file = bar.addMenu("File")
        # 添加子菜单
        file.addAction("新建")
        file.addAction("级联")
        file.addAction("平铺")
        file.triggered[QAction].connect(self.windowaction)
        self.setWindowTitle("MDI Demo")
        #self.showFullScreen() #全屏显示
        self.showMaximized() #窗口最大化
        #self.showNormal() #正常显示
        # self.setGeometry(QDesktopWidget().screenGeometry())
    def windowaction(self, q):
        type = q.text()
        print("Triggered : %s" % type)
        if type == "新建":
            # 子窗口增加一个
            self.count = self.count + 1
            # 实例化多文档界面对象
            sub = QMdiSubWindow()
            # 向sub内部添加控件
            sub.setWidget(QTextEdit())
            sub.setWindowTitle("subWindow %d" % self.count)
            self.mdi.addSubWindow(sub)
            sub.show()
            #sub.hide()
        elif type == "级联":
            self.mdi.cascadeSubWindows()
        elif type == "平铺":
            self.mdi.tileSubWindows()
        elif type == "关闭全部":
            self.mdi.closeAllSubWindows()
        elif type == "关闭活动窗口":
            self.mdi.closeActiveSubWindow()
        elif type == "测试":
            lst = self.mdi.subWindowList()
            print(lst)
    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)

        fileNewAction = self.createAction("&New", self.fileNew,
                                          QKeySequence.New, "filenew",
                                          "Create a text file")
        fileOpenAction = self.createAction("&Open...", self.fileOpen,
                                           QKeySequence.Open, "fileopen",
                                           "Open an existing text file")

        fileToolbar = self.addToolBar("File")
        fileToolbar.setObjectName("FileToolbar")
        self.addActions(fileToolbar, (fileNewAction, fileOpenAction))

    def createAction(self,
                     text,
                     slot=None,
                     shortcut=None,
                     icon=None,
                     tip=None,
                     checkable=False,
                     signal="triggered()"):
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon(":/{0}.png".format(icon)))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
        if slot is not None:
            action.triggered.connect(slot)
        if checkable:
            action.setCheckable(True)
        return action

    def addActions(self, target, actions):
        for action in actions:
            if action is None:
                target.addSeparator()
            else:
                target.addAction(action)

    #@profile
    def fileNew(self):
        try:
            print(
                u'openSystemConfig内存使用:',
                round(
                    psutil.Process(getpid()).memory_info().rss / 1024 / 1024,
                    4))
            #print(u'memory_info:', psutil.Process(getpid()).memory_info())
            #print(u'memory_info:', psutil.Process(getpid()).memory_full_info())
            objgraph.show_growth(shortnames=False)
            #templist = objgraph.by_type('QIcon')
            #print('objgraph.by_type:', templist)
            #if len(templist) >= 1:
            #  objgraph.show_backrefs(templist[-1], filename='obj.png')

            # textEdit = textedit.TextEdit()
            #self.systemConfigWindow = Ui_QSystemConfigWindow()
            #a = sys.getrefcount(self.systemConfigWindow)
            #self.mdi.addSubWindow(self.systemConfigWindow).show()
            #self.mdi.closeActiveSubWindow()

            #self.systemConfigWindow.systemConfigInfoSignal.connect(self.setSystemConfigInfo)
            #self.systemConfigWindow.pushbuttonOKOnActivated()
            self.taskConfigWindow = Ui_QTaskConfigWindow()
            self.mdi.addSubWindow(self.taskConfigWindow).show()
            #self.mdi.closeActiveSubWindow()
            #self.systemConfigWindow = None
            #self.taskConfigWindow = None
            #templist = None
            '''
            sleep(5)


            self.taskConfigWindow = Ui_QTaskConfigWindow()
            self.mdi.addSubWindow(self.taskConfigWindow).show()
            self.taskConfigWindow.systemConfigInfo = self.systemConfigInfo
            # textEdit.close()
            sleep(5)
            for win_temp in self.mdi.subWindowList():
                win_temp_widget = win_temp.widget()
                if (win_temp_widget is not None) and (isinstance(win_temp_widget, Ui_QTaskConfigWindow)):
                    self.mdi.setActiveSubWindow(win_temp)
                    self.mdi.closeActiveSubWindow()
                    
                elif (win_temp_widget is not None) and (isinstance(win_temp_widget, Ui_QSystemConfigWindow)):
                    self.mdi.setActiveSubWindow(win_temp)
                    #self.mdi.removeSubWindow(self.systemConfigWindow)
                    self.mdi.closeActiveSubWindow()
            #self.mdi.removeSubWindow(self.systemConfigWindow)
            #b = sys.getrefcount(self.systemConfigWindow)
            win_temp = None
            win_temp_widget = None
            self.systemConfigInfo = None
            self.systemConfigWindow = None
            self.taskConfigWindow = None
'''

        except Exception as e:
            print(print_exc())

    def fileOpen(self):
        #self.mdi.closeActiveSubWindow()

        #self.taskConfigWindow = Ui_QTaskConfigWindow()
        #self.mdi.addSubWindow(self.taskConfigWindow).show()
        #self.taskConfigWindow.systemConfigInfo = self.systemConfigInfo
        self.fileSave()

    def fileSave(self):
        for win_temp in self.mdi.subWindowList():
            win_temp_widget = win_temp.widget()
            if (win_temp_widget is not None) and (isinstance(
                    win_temp_widget, Ui_QTaskConfigWindow)):
                self.mdi.setActiveSubWindow(win_temp)
                self.mdi.closeActiveSubWindow()

            elif (win_temp_widget is not None) and (isinstance(
                    win_temp_widget, Ui_QSystemConfigWindow)):
                self.mdi.setActiveSubWindow(win_temp)
                # self.mdi.removeSubWindow(self.systemConfigWindow)
                self.mdi.closeActiveSubWindow()
        # self.mdi.removeSubWindow(self.systemConfigWindow)
        # b = sys.getrefcount(self.systemConfigWindow)
        #win_temp = None
        #win_temp_widget = None
        self.systemConfigInfo = None
        self.systemConfigWindow = None
        self.taskConfigWindow = None
Exemple #3
0
class ObjectTab(QWidget):
    """
    This class constructs the entire contents of the Object tab.
    """
    def __init__(self, inspector, dither, detector, object_id, *args):
        super().__init__(*args)

        self._inspector = inspector
        self._dither = dither  # remove
        self._detector = detector  # remove
        self._object_id = object_id
        self.contents = list()
        self.setMouseTracking(True)

        self.plot_selector = PlotSelector(self)

        detectors = self.determine_relevant_detectors(object_id)

        selector_area = MultiDitherDetectorSelector(detectors)
        selector_area.updated.connect(self.update_plot_button)

        self.mdi = QMdiArea(self)
        self.mdi.setContentsMargins(0, 0, 0, 0)
        self.mdi.setBackground(QBrush(QColor('#56595e')))

        h_layout = QGridLayout()
        h_layout.setSpacing(0)
        h_layout.setContentsMargins(0, 0, 0, 0)
        h_layout.addWidget(selector_area, 0, 0)
        h_layout.setAlignment(selector_area, Qt.AlignTop)
        h_layout.addWidget(self.mdi, 0, 1)

        h_layout.setColumnStretch(0, 0)
        h_layout.setColumnStretch(1, 10)

        self.detector_selector = selector_area

        v_layout = QVBoxLayout()
        v_layout.setSpacing(0)

        v_layout.addWidget(self.plot_selector)

        v_layout.addItem(h_layout)

        self.setLayout(v_layout)
        self.setContentsMargins(0, 0, 0, 0)
        self._spec_plots = None

        self._plot_descriptors = set()

        self._info_window = None

    @property
    def object_id(self):
        return self._object_id

    @property
    def dither(self):
        return self._dither

    @property
    def detector(self):
        return self._detector

    @property
    def inspector(self):
        return self._inspector

    def make_plots(self):
        self._spec_plots = SpecPlot(self._inspector, self.plot_selector, self.detector_selector)
        self._spec_plots.make_plots(self._object_id)
        for window in self._spec_plots.windows:
            if window.descriptor not in self._plot_descriptors:
                self.mdi.addSubWindow(window)
                self._plot_descriptors.add(window.descriptor)
                window.closing.connect(self.handle_closed_subwindow)
                window.activateWindow()
                window.show()

    def show_info(self):
        if self._inspector.location_tables is not None:
            info = self._inspector.location_tables.get_info(self._object_id)
            info_window = ObjectInfoWindow(info, self._inspector)
            self.mdi.addSubWindow(info_window)
            info_window.activateWindow()
            info_window.show()
            self._info_window = info_window
        else:
            m = QMessageBox(0, 'Missing Data',
                            'Location tables containing the requested information must be loaded before showing info.')
            m.exec()

    def determine_relevant_detectors(self, object_id):
        """
        Returns the detectors in which the spectra of the object can be found, in the format {dither: [detectors]}
        """
        detectors = {}

        for dither in self._inspector.spectra[object_id]:
            detectors[dither] = list(self._inspector.spectra[object_id][dither].keys())

        for d in (1, 2, 3, 4):
            if d not in detectors:
                detectors[d] = []

        return detectors

    def update_plot_button(self):
        selected = list(self.detector_selector.selected_detectors().values())

        if all(item is None for item in selected):
            self.plot_selector.plot_button.setDisabled(True)
            self.plot_selector.detector_button.setDisabled(True)
        else:
            self.plot_selector.detector_button.setEnabled(True)
            self.plot_selector.plot_button.setEnabled(True)

    def handle_closed_subwindow(self, descriptor):
        if descriptor in self._plot_descriptors:
            self._plot_descriptors.remove(descriptor)

        active_window = self.mdi.activeSubWindow()

        if active_window is not None and descriptor == active_window.widget().descriptor:
            self.mdi.closeActiveSubWindow()

    def open_detectors(self):

        selected_detectors = self.detector_selector.selected_detectors()

        inspector = self._inspector

        # make a list of all open detectors (detectors currently being viewed in tabs)

        open_detectors = []

        for tab_index in range(inspector.tabs.count()):
            tab = inspector.tabs.widget(tab_index)
            if isinstance(tab, ViewTab):
                open_detectors.append((tab.current_dither, tab.current_detector))

        # open new tabs, where necessary

        for dither in selected_detectors:
            if selected_detectors[dither] is not None:
                for detector in selected_detectors[dither]:
                    if (dither, detector) not in open_detectors:
                        inspector.new_view_tab(dither, detector)

            # pin the object in all tabs:

            for tab_index in range(inspector.tabs.count()):
                tab = inspector.tabs.widget(tab_index)
                if isinstance(tab, ViewTab):
                    tab.select_spectrum_by_id(self._object_id)
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.mdi = QMdiArea()
        self.setCentralWidget(self.mdi)

        fileNewAction = self.createAction("&New", self.fileNew,
                                          QKeySequence.New, "filenew",
                                          "Create a text file")
        fileOpenAction = self.createAction("&Open...", self.fileOpen,
                                           QKeySequence.Open, "fileopen",
                                           "Open an existing text file")

        fileToolbar = self.addToolBar("File")
        fileToolbar.setObjectName("FileToolbar")
        self.addActions(fileToolbar, (fileNewAction, fileOpenAction))

    def createAction(self,
                     text,
                     slot=None,
                     shortcut=None,
                     icon=None,
                     tip=None,
                     checkable=False,
                     signal="triggered()"):
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon(":/{0}.png".format(icon)))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
        if slot is not None:
            action.triggered.connect(slot)
        if checkable:
            action.setCheckable(True)
        return action

    def addActions(self, target, actions):
        for action in actions:
            if action is None:
                target.addSeparator()
            else:
                target.addAction(action)

    #@profile
    def fileNew(self):
        try:
            print(
                u'openSystemConfig内存使用:',
                round(
                    psutil.Process(getpid()).memory_info().rss / 1024 / 1024,
                    4))
            objgraph.show_growth(shortnames=False)
            self.taskConfigWindow = Ui_QTaskConfigWindow()
            self.mdi.addSubWindow(self.taskConfigWindow).show()
        except Exception as e:
            print(print_exc())

    def fileOpen(self):
        for win_temp in self.mdi.subWindowList():
            win_temp_widget = win_temp.widget()
            if (win_temp_widget is not None) and (isinstance(
                    win_temp_widget, Ui_QTaskConfigWindow)):
                self.mdi.setActiveSubWindow(win_temp)
                self.mdi.closeActiveSubWindow()

        self.taskConfigWindow = None