2012-02-21 77 views
0

アプリはログインフォームで起動し、ユーザーとパスワードが正しいときにメインウィンドウを開始します。私はログインフォーム(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

windowがインスタンスQMainWindowであれば、それはexec_メソッドを持っていません。しかし、それが行われた場合、exec_は、ウィンドウがモーダルであり、ユーザがそれを閉じるまでブロックすることを意味する。一方

、あなたはブロックを回避するためにwindow.show()を使用した場合、LoginForm自体を閉じます - しかし、あなたはどこにでもそれへの参照を保持していないので、その後windowはすぐにガベージコレクトになります。

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_()) 
LoginFormを想定し

は、私はあなたがそのacceptスロットを利用することを提案し、このような何かを動作するようにあなたのスタートアップコードを書き換えるだろう、QDialogです

関連する問題