1

我正在开发一个以登录窗口开头的 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...
4

1 回答 1

1

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

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

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

于 2013-05-31T18:53:31.437 回答