【问题标题】:How to create a new widget when pressing a button in PyQt5在 PyQt5 中按下按钮时如何创建新的小部件
【发布时间】:2018-01-11 13:01:59
【问题描述】:

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

【问题讨论】:

    标签: python button widget pyqt5


    【解决方案1】:

    这里的问题是你只是在你的函数StudentLog()中声明一个类,然后你永远不会创建这个类的实例。

    我建议将这个函数移到类Login中,创建一个你也可以轻松调用的方法来创建这个实例,优点是你可以使用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_())
    

    【讨论】:

    • 您的方法似乎奏效了,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2021-06-22
    • 2021-10-14
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多