应用程序以登录表单开头,当用户和密码正确时,它将启动主窗口。我无法关闭登录表单(QWidget)。
def on_pushButton_login_clicked(self):
username = str(self.ui.lineEdit_usuario.text())
password = str(self.ui.lineEdit_password.text())
if login_user(username, password):
# Hide error if Login fail
self.ui.label_error.hide()
window = Main() # QMainWindow
try:
window.exec_()
except AttributeError:
pass
#self.close() # close LoginForm & open QMainWindow
else:
self.ui.lineEdit_usuario.setFocus()
self.ui.lineEdit_usuario.clear()
self.ui.lineEdit_password.clear()
# Show error if Login fail
self.ui.label_error.show()
答案 0 :(得分:0)
如果window
是实例QMainWindow
,则它不会有exec_
方法。但如果确实如此,exec_
暗示窗口将是模态的,因此在用户关闭窗口之前就会阻塞。
另一方面,如果您使用window.show()
来避免阻止,则LoginForm
会自行关闭 - 但是window
会立即垃圾 - 因为你没有在任何地方保留对它的引用而收集。
假设LoginForm
是QDialog
,我建议您使用其accept广告位,然后重写您的启动代码以使用以下内容:
class LoginForm(QDialog):
...
def on_pushButton_login_clicked(self):
username = str(self.ui.lineEdit_usuario.text())
password = str(self.ui.lineEdit_password.text())
if login_user(username, password):
self.accept()
else:
...
app = QtGui.QApplication(sys.argv)
if LoginForm().exec_() == QtGui.QDialog.Accepted:
window = Main()
window.show()
sys.exit(app.exec_())