2017-08-03 5 views
1

Je suis très nouveau à PyQt5 et je fais un programme simple où l'utilisateur est d'abord présenté avec un choix de deux boutons, quand ils pressent un, il devrait les prendre à un nouvel écran, quand ils appuient sur l'autre, il devrait les prendre à un autre écran. J'ai du mal à ouvrir un nouveau widget lorsque j'appuie sur le bouton. La façon dont j'ai essayé de faire ceci est en ayant une fonction qui crée le widget et cette fonction est exécutée lorsque l'utilisateur appuie sur le bouton, mais actuellement le widget n'est pas créé par la fonction.Comment créer un nouveau widget en appuyant sur un bouton dans PyQt5

Voici mon 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_()) 

Répondre

0

Le problème ici est que vous ne déclarez une classe à l'intérieur de votre fonction StudentLog(), et vous ne créez une instance de cette classe.

Je propose de déplacer cette fonction dans la classe Login, pour créer une méthode que vous pouvez facilement appeler aussi afin de créer cette instance, et l'avantage est que vous pouvez garder une trace du nouveau widget en utilisant self.:

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

Votre méthode semble avoir fonctionné, merci beaucoup pour votre aide. –

+0

@JoeMalley, sympa, merci pour les commentaires! – PRMoureu