我正在开发一个以登录窗口开头的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...
答案 0 :(得分:1)
我认为问题是show()允许程序继续;你应该使用exec_()来暂停代码,直到窗口关闭。所以,如果你把:
def main():
app = QtGui.QApplication(sys.argv)
w = AuthWindow()
w.exec_()
w.show()
sys.exit(app.exec_())
第一个authwindow在第一个authwindow关闭之前不会被创建。