关闭父窗口,当子窗口打开时

时间:2012-02-21 17:00:22

标签: python qt login pyqt pyqt4

应用程序以登录表单开头,当用户和密码正确时,它将启动主窗口。我无法关闭登录表单(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()

1 个答案:

答案 0 :(得分:0)

如果window是实例QMainWindow,则它不会有exec_方法。但如果确实如此,exec_暗示窗口将是模态的,因此在用户关闭窗口之前就会阻塞。

另一方面,如果您使用window.show()来避免阻止,则LoginForm 自行关闭 - 但是window会立即垃圾 - 因为你没有在任何地方保留对它的引用而收集。

假设LoginFormQDialog,我建议您使用其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_())