当前位置:   article > 正文

PyQt5使用stackedWidget实现页面切换_stackedwidget页面切换

stackedwidget页面切换

前言

本文为PyQt5入门教程,具体为以下四步骤

  • 一、使用Qt Designer设计页面并将UI文件转为.py文件
  • 二、新建一个.py文件调用UI文件
  • 三、设置按钮单击事件实现切换页面

一、使用Qt Designer设计页面并将UI文件转为.py文件

首先打开Qt Designer软件并新建一个MainWindow(若没有Qt Designer软件可以跳过该段,直接复制结尾转为py文件后的ui代码)

此时可以通过左上角搜索到我们需要用到的stackedWidget

将它拖入我们界面中并可以通过鼠标手动将它大小调整

此时我们可以在里面任意添加一些控件,也可以在该控件外面添加一个label控件

此时我们可以通过点击stackedWidget右上角的小箭头进行切换

进入该界面后我们依旧在同样位置加入控件

此时我们的设计就已经完成了,保存到自己方便的位置后,开始转换为.py文件

此时在该路径处输入cmd并回车

输入pyuic5 untitled.ui -o ui.py并回车

解析:

  • pyuic5:这是 PyQt5 的用户界面编译器,它接受 .ui 文件并将其转换为 Python 代码。
  • untitled.ui:这是你要转换的 .ui 文件名。
  • -o:这是一个选项,表示 "输出"。它告诉 pyuic5 你希望将输出保存到哪个文件中。
  • ui.py:这是输出文件的名称。换句话说,这个命令将会创建一个名为 "ui.py" 的 Python 文件,其中包含了从 "untitled.ui" 转换来的代码。

此时回到文件夹就会发现python文件已经转换出来了

生成后的ui代码:

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'untitled.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.4
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again. Do not edit this file unless you know what you are doing.
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. class Ui_MainWindow(object):
  10. def setupUi(self, MainWindow):
  11. MainWindow.setObjectName("MainWindow")
  12. MainWindow.resize(800, 600)
  13. self.centralwidget = QtWidgets.QWidget(MainWindow)
  14. self.centralwidget.setObjectName("centralwidget")
  15. self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget)
  16. self.stackedWidget.setGeometry(QtCore.QRect(170, 70, 421, 341))
  17. self.stackedWidget.setObjectName("stackedWidget")
  18. self.page_3 = QtWidgets.QWidget()
  19. self.page_3.setObjectName("page_3")
  20. self.label = QtWidgets.QLabel(self.page_3)
  21. self.label.setGeometry(QtCore.QRect(180, 60, 72, 15))
  22. self.label.setObjectName("label")
  23. self.pushButton = QtWidgets.QPushButton(self.page_3)
  24. self.pushButton.setGeometry(QtCore.QRect(160, 230, 93, 28))
  25. self.pushButton.setObjectName("pushButton")
  26. self.stackedWidget.addWidget(self.page_3)
  27. self.page_4 = QtWidgets.QWidget()
  28. self.page_4.setObjectName("page_4")
  29. self.label_3 = QtWidgets.QLabel(self.page_4)
  30. self.label_3.setGeometry(QtCore.QRect(180, 60, 72, 15))
  31. self.label_3.setObjectName("label_3")
  32. self.pushButton_2 = QtWidgets.QPushButton(self.page_4)
  33. self.pushButton_2.setGeometry(QtCore.QRect(160, 230, 93, 28))
  34. self.pushButton_2.setObjectName("pushButton_2")
  35. self.stackedWidget.addWidget(self.page_4)
  36. self.label_2 = QtWidgets.QLabel(self.centralwidget)
  37. self.label_2.setGeometry(QtCore.QRect(340, 460, 72, 15))
  38. self.label_2.setObjectName("label_2")
  39. MainWindow.setCentralWidget(self.centralwidget)
  40. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  41. self.statusbar.setObjectName("statusbar")
  42. MainWindow.setStatusBar(self.statusbar)
  43. self.menubar = QtWidgets.QMenuBar(MainWindow)
  44. self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26))
  45. self.menubar.setObjectName("menubar")
  46. MainWindow.setMenuBar(self.menubar)
  47. self.retranslateUi(MainWindow)
  48. self.stackedWidget.setCurrentIndex(0)
  49. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  50. def retranslateUi(self, MainWindow):
  51. _translate = QtCore.QCoreApplication.translate
  52. MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
  53. self.label.setText(_translate("MainWindow", "第一页"))
  54. self.pushButton.setText(_translate("MainWindow", "切换第二页"))
  55. self.label_3.setText(_translate("MainWindow", "第二页"))
  56. self.pushButton_2.setText(_translate("MainWindow", "切换第一页"))
  57. self.label_2.setText(_translate("MainWindow", "TextLabel"))

二、新建一个.py文件调用UI文件

我们在编程软件中打开该文件夹并新建一个.py文件

此时我们开始编写引用代码

  1. import sys # 导入sys模块,用于处理命令行参数和退出程序
  2. from PyQt5.QtWidgets import QMainWindow, QApplication # 从PyQt5.QtWidgets模块导入QMainWindow和QApplication类
  3. from ui import Ui_MainWindow # 从ui模块导入Ui_MainWindow类,该类定义了主窗口的用户界面
  4. class MainWindow(QMainWindow, Ui_MainWindow): # 定义一个名为MainWindow的类,继承自QMainWindow和Ui_MainWindow
  5. def __init__(self): # 类的构造函数
  6. super().__init__() # 调用父类的构造函数,初始化主窗口
  7. self.setupUi(self) # 调用setupUi方法,将用户界面与主窗口关联起来
  8. if __name__ == "__main__": # 如果当前脚本作为主程序运行
  9. app = QApplication(sys.argv) # 创建一个QApplication对象,用于管理GUI应用程序的控制流和主要设置
  10. main = MainWindow() # 创建一个MainWindow对象,即主窗口实例
  11. main.show() # 显示主窗口
  12. sys.exit(app.exec_()) # 进入事件循环,等待用户操作并处理事件,然后退出程序

上述代码解析:

首先,它导入了必要的模块和类,包括sysQMainWindowQApplication和自定义的Ui_MainWindow类。然后,它定义了一个名为MainWindow的类,该类继承自QMainWindowUi_MainWindow。在MainWindow类的构造函数中,它调用了父类的构造函数来初始化主窗口,并通过调用setupUi方法将用户界面与主窗口关联起来。

最后,在if __name__ == "__main__"语句块中,它创建了一个QApplication对象和一个MainWindow对象。通过调用show方法,它显示了主窗口。然后,它进入事件循环,等待用户操作并处理事件。当用户关闭主窗口或执行退出操作时,程序会调用sys.exit方法退出。

此时运行程序,就可以看到我们所设计的ui界面了

三、设置按钮单击事件实现切换页面

此时我们设置两个单击事件,分别对应两个界面的按钮

  1. def click_button1(self):
  2. self.stackedWidget.setCurrentIndex(1)
  3. def click_button2(self):
  4. self.stackedWidget.setCurrentIndex(0)

解析:拿click_button2举例——当用户点击按钮时,这个方法会被调用。它的作用是将stackedWidget的当前索引设置为0。这意味着当用户点击按钮2时,将显示第一个页面(页面是从0开始计算的,第0页就是我们所谓的第一页)

此时我们将按钮控件和该事件进行关联

  1. self.pushButton.clicked.connect(self.click_button1)
  2. self.pushButton_2.clicked.connect(self.click_button2)

解析:拿第一行举例——这行代码将pushButton的点击事件与click_button1方法连接起来。当用户点击pushButton时,会调用click_button1方法

此时我们就可以运行界面来查看我们的应用了

(点击前)

(点击后)

可以重复点击,若没有出现问题就说明没有出现问题,由于我们这是局部切换页面,所以局外的label并没有随着内部的变化而变化。

总结

完整代码如下

  1. import sys
  2. from PyQt5.QtWidgets import QMainWindow,QApplication
  3. from ui import Ui_MainWindow
  4. class MainWindow(QMainWindow,Ui_MainWindow):
  5. def __init__(self):
  6. super().__init__()
  7. self.setupUi(self)
  8. self.pushButton.clicked.connect(self.click_button1)
  9. self.pushButton_2.clicked.connect(self.click_button2)
  10. def click_button1(self):
  11. self.stackedWidget.setCurrentIndex(1)
  12. def click_button2(self):
  13. self.stackedWidget.setCurrentIndex(0)
  14. if __name__ == "__main__":
  15. app = QApplication(sys.argv)
  16. main = MainWindow()
  17. main.show()
  18. sys.exit(app.exec_())

以上便是本人的制作过程,如遇问题或者文章有错误可私信或者评论 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/457728
推荐阅读
相关标签
  

闽ICP备14008679号