Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python gui打开新窗口_Python_User Interface_Window_Pyqt - Fatal编程技术网

从python gui打开新窗口

从python gui打开新窗口,python,user-interface,window,pyqt,Python,User Interface,Window,Pyqt,在python gui应用程序中打开新窗口时遇到问题。我有3个类(显示第一次登录,打开超过2个窗口)。这很好: class LoginDialog(QtGui.QDialog): def __init__(self, parent = None): super(LoginDialog, self).__init__(parent) ..... class MainWindow(QtGui.QMainWindow): def __init__(self,

在python gui应用程序中打开新窗口时遇到问题。我有3个类(显示第一次登录,打开超过2个窗口)。这很好:

class LoginDialog(QtGui.QDialog):
    def __init__(self, parent = None):
        super(LoginDialog, self).__init__(parent)
    .....

class MainWindow(QtGui.QMainWindow):
    def __init__(self, parent = None):
            QtGui.QWidget.__init__(self, parent)
    .....

class ImageViewerMainWindow(QtGui.QMainWindow):
    def __init__(self, path, parent = None):
        super(ImageViewerMainWindow, self).__init__(parent)
    .....

if __name__ == "__main__":
    qtApp = QtGui.QApplication(sys.argv)

    loginDlg = LoginDialog()
    if not loginDlg.exec_():
        sys.exit(-1)

    MyMainWindow = MainWindow()
    MyMainWindow.show()

    viewer = ImageViewerMainWindow("C:\image.jpg")
    viewer.show()

    sys.exit(qtApp.exec_())
我需要从主窗口执行查看器,但当我这样放置它时,它会闪烁并消失:

class MainWindow(QtGui.QMainWindow):
        def __init__(self, parent = None):
                QtGui.QWidget.__init__(self, parent)
        .....
        def DoOpenImageViewer(self):
                viewer = ImageViewerMainWindow("C:\image.jpg")
                viewer.show()

您需要保留对查看器的引用,否则当
viewer
超出范围并被垃圾收集时,新窗口将被破坏。 如果一次只需要一个窗口,可以执行以下操作:

class MainWindow(QtGui.QMainWindow):
        def __init__(self, parent = None):
                QtGui.QWidget.__init__(self, parent)
        .....
        def DoOpenImageViewer(self):
                self.viewer = ImageViewerMainWindow("C:\image.jpg")
                self.viewer.show()

否则,您可以使用列表来存储引用。

我已经按照您的建议使用列表来存储引用,我还有一个问题:当MainWindow关闭时,如何关闭所有打开的窗口?我在MainWindow类中有这样的Quit函数:
def DoQuit(self):self.DoLogout()QtGui.qApp.Quit()
您可以遍历列表并在每个小部件上调用
disposelator
,或者清除列表也应该处理所有窗口,原因与它们以前没有保持打开相同(至少在没有其他参考的情况下)。