Qt顺序显示窗口

时间:2013-05-31 16:53:26

标签: python qt4 pyqt

我正在开发一个以登录窗口开头的Python Qt应用程序。登录后,我想显示正常的应用程序窗口。作为测试,我试图两次显示AuthWindow(登录窗口)。所需的效果是登录窗口打开一次,我关闭它,然后第二次打开,等等。实际发生的是第一次打开,我关闭它,程序退出。

import sys
from PyQt4 import QtGui

from AuthWindow import AuthWindow

def main():
    app = QtGui.QApplication(sys.argv)
    w = AuthWindow()
    w.show()
    w = AuthWindow()
    w.show()
    sys.exit(app.exec())

if __name__ == '__main__':
    main()

以下是AuthWindow的代码:

from PyQt4 import QtGui

class AuthWindow(QtGui.QDialog):
    User, Admin = range(2)

    def __init__(self, parent = None):
        super().__init__(parent)
        self.setWindowTitle('Login')
        hbox = QtGui.QHBoxLayout(self)
        vbox = QtGui.QVBoxLayout()

        self.username = QtGui.QLineEdit()
        self.password = QtGui.QLineEdit()

        vbox.addWidget(QtGui.QLabel('Username'))
        vbox.addWidget(self.username)
        vbox.addWidget(QtGui.QLabel('Password'))
        vbox.addWidget(self.password)

        btn = QtGui.QPushButton('Login')
        btn.clicked.connect(self.loginClicked)

        hbox.addLayout(vbox)
        hbox.addWidget(btn)

        self.password.setEchoMode(QtGui.QLineEdit.Password)

    def loginClicked(self, ev):
        auth = self.checkLogin()
        print(auth)

    def checkLogin(self):
        username = self.username.text()
        password = self.password.text()
        print(username)
        print(password)
        # login logic will go here...

1 个答案:

答案 0 :(得分:1)

我认为问题是show()允许程序继续;你应该使用exec_()来暂停代码,直到窗口关闭。所以,如果你把:

def main():
    app = QtGui.QApplication(sys.argv)
    w = AuthWindow()
    w.exec_()
    w.show()
    sys.exit(app.exec_())

第一个authwindow在第一个authwindow关闭之前不会被创建。