如何在PyQt5中按按钮时创建新的小部件

2024-09-19 23:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 函数用户inself屏幕init部件def
1条回答
网友
1楼 · 发布于 2024-09-19 23:35:48

这里的问题是,您只在函数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_())

相关问题 更多 >