2014-04-21 1 views
0

메시지 상자가 계속 깜박입니다. 충돌은 없지만 열리고 다시 열립니다. 이 문제를 어떻게 해결할 수 있습니까?python qt 메시지 상자에서 오류가 발생했습니다.

self.retranslateUi(Login) 
    QtCore.QObject.connect(self.ExitButton, QtCore.SIGNAL(_fromUtf8("clicked()")), Login.close) 
    QtCore.QObject.connect(self.LoginButton, QtCore.SIGNAL("clicked()"),self.get_value_from_user) 
    QtCore.QMetaObject.connectSlotsByName(Login) 
    Login.setTabOrder(self.LoginButton, self.UsernameEdit) 
    Login.setTabOrder(self.UsernameEdit, self.PasswordEdit) 
    Login.setTabOrder(self.PasswordEdit, self.ExitButton) 

def get_value_from_user(self): 
    Correct_details = False 
    while Correct_details==False: 
     inputusername=self.UsernameEdit.text() 
     inputpassword=self.PasswordEdit.text() 
     cur.execute("SELECT password FROM tblStaff WHERE username='"+inputusername+"'") 
     password=str(cur.fetchone()) 
     password=password[2:-3] 
     cur.execute("SELECT firstname FROM tblStaff WHERE username='"+inputusername+"'") 
     FirstName=str(cur.fetchone()) 
     FirstName=FirstName[2:-3] 
     cur.execute("SELECT surname FROM tblStaff WHERE username='"+inputusername+"'") 
     Surname=str(cur.fetchone()) 
     Surname=Surname[2:-3] 
     if str(password) == str(inputpassword): 
      self.msgBox1 = QMessageBox(QMessageBox.Information,'Successful', "Succesfully Logged in") 
      self.msgBox1.show() 
      Correct_details = True 
     else: 
      self.msgBox2 = QMessageBox(QMessageBox.Information, 'Warning', "The Username or Password you have entered is incorrect") 
      self.msgBox2.show() 
+0

get_value_from_user가 호출 될 때/어디에서 표시 할 수 있습니까? –

+0

예, 로그인 버튼을 눌렀을 때 호출 됨 – Thaz

답변

0

프로그램 논리가 잘못되었습니다. get_value_from_user() 방법 안에는 while Correct_details==False: 줄이 있습니다. 이것이 문제의 원인이되는 선입니다. 사용자가 잘못된 로그인 세부 정보를 입력하면 다시 입력 할 수있는 옵션이 없기 때문에 self.UsernameEditself.PasswordEdit에서 동일한 로그인 세부 정보를 반복적으로 읽고 물론 계속해서 올바르지 않으므로 루프가 실행됩니다. 영원히 루프의 각 반복, 당신은 그들이 틀렸다는 메시지 상자를 팝업.

위에서 언급 한 루프는 사용자의 사용자 이름과 암호를 다시 입력 할 수있는 코드 (어쩌면 get_value_from_user을 호출하는 메서드)의 다른 위치에 있어야합니다. get_value_from_user() 메서드는 변수 Correct_Details을 반환해야하므로 호출하는 메서드가 사용자에게 로그인 양식을 다시 표시할지 아니면 계속 진행할지 결정할 수 있습니다.

+0

감사합니다. 사용자, 예, 방금 lineedit을 지워서 사용자 이름과 비밀번호를 다시 입력 할 수 있도록하고 잘못 입력 한 경우 휴식을 사용했습니다. :) btw, 다른 위젯에 연결하는 방법을 알고 있습니까? 나는이 주제에 대해 많은 것을 읽었지 만 그 중 어느 것도 이해하기가 어렵다. 두 개의 서로 다른 .py 파일에 두 개의 다른 위젯이 있는데이 중 하나가 로그인에 성공하면 다른 파일을 열려고합니다 : S – Thaz

+0

@Thaz는 아마도 다른 질문을 게시 할 수 있습니다. –

관련 문제