2012-02-21 4 views
0

앱이 로그인 양식으로 시작되며 사용자와 비밀번호가 맞으면 기본 창을 시작합니다. 로그인 양식 (QWidget)을 닫을 수 없습니다. window 인스턴스 QMainWindow 경우하위 창을 열 때 상위 창 닫기

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

은, 그것은 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입니다