2012-08-04 4 views
8

고객이 응용 프로그램을 시작할 때 일종의 로그인 양식을 구현할 수 있는지 물어볼 때 거의 응용 프로그램을 마쳤습니다.로그인 대화 상자 PyQt

지금까지 UI를 디자인했으며 실제 실행에 대해 설명했습니다. 사용자 이름과 암호는 지금은 관련이 없습니다.

class Login(QtGui.QDialog): 
    def __init__(self,parent=None): 
     QtGui.QWidget.__init__(self,parent) 
     self.ui=Ui_dlgLogovanje() 
     self.ui.setupUi(self) 

     QtCore.QObject.connect(self.ui.buttonLogin, QtCore.SIGNAL("clicked()"), self.doLogin) 

    def doLogin(self): 
     name = str(self.ui.lineKorisnik.text()) 
     passwd = str(self.ui.lineSifra.text()) 
     if name == "john" and passwd =="doe": 
      self.runIt() 
     else: 
      QtGui.QMessageBox.warning(self, 'Greška', 
     "Bad user or password", QtGui.QMessageBox.Ok)   

    def runIt(self): 
     myprogram = Window()   
     myprogram.showMaximized() #myprogram is 

class Window(QtGui.QMainWindow): 
    def __init__(self,parent=None): 
     QtGui.QWidget.__init__(self,parent) 
     self.ui=Ui_MainWindow() 
     self.ui.setupUi(self) 


if __name__=="__main__": 
    program = QtGui.QApplication(sys.argv) 
    myprogram = Window() 
    if Login().exec_() == QtGui.QDialog.Accepted:  
     sys.exit(program.exec_()) 

로그인 양식이 표시됩니다. 올바른 사용자 이름과 암호를 입력하면 주 창이 표시되어 작동합니다. 그러나 로그인 양식은 활성 상태로 유지되고 닫으면 기본 창이 닫힙니다.

+3

이,'QtCore.QObject.connect (self.ui2.buttonLogin는, QtCore.SIGNAL는 ("클릭()"), self.doLogin)는'자기'로 대체 할 수있다 .ui2.buttonLogin.clicked.connect (self.doLogin) ' – warvariuc

답변

23

QDialog에는 자체 이벤트 루프가 있으므로 주 응용 프로그램과 별도로 실행할 수 있습니다.

그러면 주 애플리케이션을 실행할지 여부를 결정하기 위해 대화 상자의 반환 코드를 확인하면됩니다.

예제 코드 : BTW

from PyQt4 import QtGui 
# from mainwindow import Ui_MainWindow 

class Login(QtGui.QDialog): 
    def __init__(self, parent=None): 
     super(Login, self).__init__(parent) 
     self.textName = QtGui.QLineEdit(self) 
     self.textPass = QtGui.QLineEdit(self) 
     self.buttonLogin = QtGui.QPushButton('Login', self) 
     self.buttonLogin.clicked.connect(self.handleLogin) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.textName) 
     layout.addWidget(self.textPass) 
     layout.addWidget(self.buttonLogin) 

    def handleLogin(self): 
     if (self.textName.text() == 'foo' and 
      self.textPass.text() == 'bar'): 
      self.accept() 
     else: 
      QtGui.QMessageBox.warning(
       self, 'Error', 'Bad user or password') 

class Window(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(Window, self).__init__(parent) 
     # self.ui = Ui_MainWindow() 
     # self.ui.setupUi(self)  

if __name__ == '__main__': 

    import sys 
    app = QtGui.QApplication(sys.argv) 
    login = Login() 

    if login.exec_() == QtGui.QDialog.Accepted: 
     window = Window() 
     window.show() 
     sys.exit(app.exec_()) 
+0

답장을 보내 주셔서 감사합니다. 확인하고 싶다면 두 변수가 같다고 말하면됩니다. 그렇다면 신호를 내 보냅니다. if name == "john"and passw == "doe": self.emit (여기에 무엇인가) – ivica

+1

이 예에서는 더 이상 값을 확인할 수 없도록 버려지는 임시 대화 상자를 만듭니다. 당신은 아마도 login = Login(); login.exec_() 그리고 받아 들여진 것에 대한 반환을 확인하십시오. 그런 다음 로그인 객체의 속성을 계속 확인할 수 있습니다. – jdi

+0

글쎄, 우리가 어딘가에있어 : ​​ 나는 더 명확하게 읽을 수 있도록, 새로운 코드로 원래의 게시를 편집했습니다. – ivica

관련 문제