2017-08-03 4 views
1

Ich bin sehr neu in PyQt5 und mache ein einfaches Programm, wo dem Benutzer zuerst eine Auswahl von zwei Tasten präsentiert wird, wenn sie eine drücken, sollte sie sie zu nehmen neuer Bildschirm, wenn sie den anderen drücken, sollte er sie zu einem anderen Bildschirm bringen. Ich habe Probleme, ein neues Widget zu öffnen, wenn ich den Knopf drücke. Die Art, wie ich das versucht habe, ist eine Funktion, die das Widget erstellt, und diese Funktion wird ausgeführt, wenn der Benutzer die Schaltfläche drückt, aber das Widget wird derzeit nicht von der Funktion erstellt.Wie man ein neues Widget erstellt, wenn man in PyQt5 eine Taste drückt

Hier ist mein Code.

def StudentLog(): 
    class StudentLogin(QWidget): 
     def __init__(self): 
      super().__init__() 
      self.initUI() 

     def initUI(self): 
      self.setGeometry(300, 300, 300, 200) 
      self.setWindowTitle('Student log in screen')  
      self.show() 


class Login(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI()   

    def initUI(self): 

     QToolTip.setFont(QFont('SansSerif', 10))  
     self.setToolTip('Login screen') 
     btn = QPushButton('Student Login', self) 
     btn.setToolTip('This will log you in as a student') 
     btn.move(10, 50) 
     btn.clicked.connect(StudentLog) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Log in screen')  
     self.show() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Login() 
    sys.exit(app.exec_()) 

Antwort

0

Das hier Problem ist, dass Sie nur eine Klasse in Ihrer Funktion StudentLog(), deklarieren und dann erstellen Sie nie eine Instanz dieser Klasse.

Ich schlage vor, diese Funktion innerhalb der Klasse Login zu bewegen, ein Verfahren zu schaffen Sie leicht zu, um diese Instanz zu erstellen nennen können, und der Vorteil ist, dass Sie durch die Verwendung self. eine Spur des neuen Widget halten können:

class StudentLogin(QWidget): 
    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 
     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Student log in screen') 
     self.show() 


class Login(QWidget): 

    def __init__(self): 
     super().__init__() 
     self.initUI() 

    def initUI(self): 

     QToolTip.setFont(QFont('SansSerif', 10)) 
     self.setToolTip('Login screen') 
     btn = QPushButton('Student Login', self) 
     btn.setToolTip('This will log you in as a student') 
     btn.move(10, 50) 
     btn.clicked.connect(self.student_log) 

     self.setGeometry(300, 300, 300, 200) 
     self.setWindowTitle('Log in screen') 
     self.show() 

    def student_log(self): 
     self.widget = StudentLogin() 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    ex = Login() 
    sys.exit(app.exec_()) 
+0

Ihre Methode scheint zu funktionieren, vielen Dank für Ihre Hilfe. –

+0

@JoeMalley, schön, danke für die Rückmeldung! – PRMoureu

Verwandte Themen