2017-08-03 30 views
1

我对PyQt5非常陌生,并且正在制作一个简单的程序,用户在第一次出现时可以选择两个按钮,当他们按下一个按钮时应该将它们带到新的屏幕,当他们按下另一个时,它应该把它们带到另一个屏幕。按下按钮时我无法打开新的小部件。我试图做到这一点的方式是通过创建一个创建窗口小部件的函数,并在用户按下按钮时运行此函数,但当前该窗口小部件不是由该函数创建的。如何在PyQt5中按下按钮时创建新的小部件

这是我的代码。

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

回答

0

这里的问题是,你只声明你的函数StudentLog()内一类,然后你从来没有创建这个类的一个实例。

我建议移动此功能的类Login里面,去创造你可以很容易地调用也为了创建这个实例的方法,而好处是,你可以通过使用self.保持新的widget的轨道:

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

你的方法似乎已经奏效,非常感谢你的帮助。 –

+0

@JoeMalley,很好,谢谢你的反馈! – PRMoureu

相关问题