2012-02-21 2 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 будет немедленно сборщиком мусора, потому что вы не держит ссылку на него в любом месте.

Предполагая 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_()) 
Смежные вопросы