PyQt5 – QStacked小工具

yizhihongxing

下面我来详细讲解一下Python的PyQt5中QStacked小工具的使用攻略。首先要介绍一下QStacked小工具,它是一种用于显示多个页面并允许用户切换它们的小工具。我们可以通过QStackedWidget类来创建它,它可以包含多个QWidget对象,相当于一个容器来装载这些QWidget对象。

使用QStacked小工具,我们可以非常方便地实现一些特定的界面效果,比如登陆与注册页的切换、设置页与主界面之间的切换等等。

下面是QStacked小工具的使用步骤:

创建QStacked小工具

stackedWidget = QtWidgets.QStackedWidget(self)

这里我们创建了一个QStackedWidget对象,把它作为窗口的子组件。注意self是指当前窗口对象。

添加QWidget

widget1 = QWidget()
widget2 = QWidget()
stackedWidget.addWidget(widget1)
stackedWidget.addWidget(widget2)

我们可以创建多个QWidget对象,然后通过addWidget()方法将它们添加到QStacked小工具中,QStacked小工具会默认按照添加的顺序依次显示这些QWidget。

切换QWidget

stackedWidget.setCurrentIndex(1)

我们可以通过setCurrentIndex()方法切换当前显示的QWidget,这里setCurrentIndex(1)表示切换到第二个QWidget对象。

以上就是QStacked小工具的使用步骤,下面我们来看两个示例应用:

示例一:登陆与注册页的切换

我们可以通过QStacked小工具实现登陆与注册页的切换效果,代码如下:

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

    def initUI(self):
        self.usernameLabel = QLabel("用户名:")
        self.passwordLabel = QLabel("密码:")
        self.usernameLineEdit = QLineEdit()
        self.passwordLineEdit = QLineEdit()
        self.loginButton = QPushButton("登陆")
        self.registerButton = QPushButton("去注册")
        self.loginButton.clicked.connect(self.login)
        self.registerButton.clicked.connect(self.gotoRegister)

        layout = QVBoxLayout()
        layout.addWidget(self.usernameLabel)
        layout.addWidget(self.usernameLineEdit)
        layout.addWidget(self.passwordLabel)
        layout.addWidget(self.passwordLineEdit)
        layout.addWidget(self.loginButton)
        layout.addWidget(self.registerButton)
        self.setLayout(layout)

    def login(self):
        # 登陆操作
        pass

    def gotoRegister(self):
        stackedWidget.setCurrentIndex(1)


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

    def initUI(self):
        self.usernameLabel = QLabel("用户名:")
        self.passwordLabel = QLabel("密码:")
        self.usernameLineEdit = QLineEdit()
        self.passwordLineEdit = QLineEdit()
        self.registerButton = QPushButton("注册")
        self.loginButton = QPushButton("去登陆")
        self.registerButton.clicked.connect(self.register)
        self.loginButton.clicked.connect(self.gotoLogin)

        layout = QVBoxLayout()
        layout.addWidget(self.usernameLabel)
        layout.addWidget(self.usernameLineEdit)
        layout.addWidget(self.passwordLabel)
        layout.addWidget(self.passwordLineEdit)
        layout.addWidget(self.registerButton)
        layout.addWidget(self.loginButton)
        self.setLayout(layout)

    def register(self):
        # 注册操作
        pass

    def gotoLogin(self):
        stackedWidget.setCurrentIndex(0)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    stackedWidget = QStackedWidget()
    loginWidget = LoginWidget()
    registerWidget = RegisterWidget()
    stackedWidget.addWidget(loginWidget)
    stackedWidget.addWidget(registerWidget)
    stackedWidget.show()
    sys.exit(app.exec_())

我们首先创建了一个LoginWidget,它包含了一个用户名输入框、一个密码输入框、一个登陆按钮和一个去注册按钮。当点击“去注册”按钮时,我们通过stackedWidget.setCurrentIndex(1)方法将当前显示的QWidget切换到RegisterWidget,从而实现登陆页和注册页的切换。

示例二:设置页与主界面之间的切换

我们也可以通过QStacked小工具实现设置页与主界面之间的切换效果,代码如下:

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        action = QAction("设置", self)
        action.triggered.connect(self.showSetting)

        menu = self.menuBar().addMenu("菜单")
        menu.addAction(action)

        self.centralWidget = QWidget()
        self.stackedWidget = QStackedWidget(self.centralWidget)
        self.mainWidget = QWidget()
        self.settingWidget = QWidget()

        self.label = QLabel("主界面")
        self.mainLayout = QVBoxLayout()
        self.mainLayout.addWidget(self.label)
        self.mainWidget.setLayout(self.mainLayout)

        self.textEdit = QTextEdit()
        self.settingLayout = QVBoxLayout()
        self.settingLayout.addWidget(self.textEdit)
        self.settingWidget.setLayout(self.settingLayout)

        self.stackedWidget.addWidget(self.mainWidget)
        self.stackedWidget.addWidget(self.settingWidget)

        self.setCentralWidget(self.centralWidget)

    def showSetting(self):
        self.stackedWidget.setCurrentIndex(1)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())

我们创建了一个MainWindow,它包含了一个主界面和一个设置页,当我们在菜单栏中点击“设置”时,就可以通过self.stackedWidget.setCurrentIndex(1)将当前显示的QWidget切换到settingWidget,从而实现主界面和设置页的切换。

以上两个示例说明了QStacked小工具的基本使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 – QStacked小工具 - Python技术站

(0)
上一篇 2023年5月10日
下一篇 2023年5月10日
合作推广
合作推广
分享本页
返回顶部