PyQt5是一个流行的Python库,用于创建桌面应用程序。它提供了对Qt应用程序框架的访问,使得开发者可以利用Qt的强大功能来构建跨平台的应用程序。
首先,你需要确保你的计算机上已经安装了Python。可以通过在命令行中输入以下命令来验证Python是否已安装:
python --version
安装PyQt5,打开命令行工具,使用pip命令安装PyQt5
pip install pyqt5
注意:如果你在安装过程中遇到网络问题,导致下载失败,可以使用国内第三方镜像网站,作为请求服务器。这里推荐的是清华大学的TUNA镜像站。
pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
此时Pyqt5已经安装完成,因为本篇博客需要用到Qt Designer
工具,为了使用PyQt5的Qt Designer
工具,需要安装PyQt5的工具包。可以使用以下命令:
pip install pyqt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
Qt Designer 是一个图形用户界面(GUI)设计工具,它允许开发者通过拖放组件的方式来设计应用程序的用户界面,而不需要编写大量的代码。
安装完成后,可以通过以下命令查看是否安装成功:
pip list
开发一个Pyqt5的桌面应用必须要包含两个类:
这两个类都在PyQt5.QtWidgets模块下。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
# 创建QApplication类的实例
app = QApplication(sys.argv)
# 创建一个窗口
window = QWidget()
# 设置窗口的尺寸
window.resize(500, 500)
# 设置窗口的标题
window.setWindowTitle("Hello World")
# 显示窗口
window.show()
# 进入程序的主循环
sys.exit(app.exec_())
在 PyQt5 应用程序中,sys.exit(app.exec_())
是一个常见的代码模式,它用于启动应用程序的事件循环,并在事件循环结束时正确退出应用程序(相当于监测)。app 是 QApplication 类的一个实例,它负责管理整个应用程序的生命周期。exec_() 是 QApplication 的一个方法,它的作用是启动应用程序的事件循环。这个方法会阻塞当前线程,直到应用程序接收到退出信号或调用 QApplication.quit()
。
QWidget 是 PyQt5 中所有控件和窗口的基类。它提供了丰富的方法和属性,使得开发者可以灵活地定制窗口的外观和行为。
Qt Designer 是一个功能强大的图形用户界面(GUI)设计工具,它是 Qt 框架的一部分,并与 PyQt5 紧密集成。通过 Qt Designer,开发者可以可视化地设计应用程序的用户界面,而无需编写大量的代码。此工具包含在第三方包pyqt5-tools
下,执行安装(install)之后,该工具会自动生成在对应安装的Python环境中:Lib
→ \rightarrow →site-packages
→ \rightarrow →qt5_applications
→ \rightarrow →Qt
→ \rightarrow →bin
目录下的designer.exe
可执行文件,双击运行即可。
选择一个窗口,创建即可,之后选择自己需要的控件进行拼装即可,这里不对简单步骤进行过多讲解。
使用PyCharm集成QtDesigner工具,点击PyCharm的设置(Settings),Tools下的外部工具(External Tools),进行添加即可。
在PyQt5中,常见的窗口类型主要有三种:QMainWindow、QWidget和QDialog。每种窗口类型都有其特定的用途和特点。
QWidget 和 QMainWindow 都是 PyQt5 中重要的窗口类,它们在构建 GUI 应用程序时扮演着基础的角色。理解它们之间的关系和区别对于设计有效的用户界面至关重要。
QWidget
QMainWindow
QMainWindow 继承自 QWidget,这意味着 QMainWindow 拥有 QWidget 的所有属性和方法。
在 PyQt5 中,uic(用户界面编译器)模块是一个强大的工具,它允许开发者将 Qt Designer 设计的 .ui 文件加载到 Python 应用程序中。这为快速开发 GUI 应用程序提供了极大的便利。uic.loadUi
函数可以动态加载 .ui 文件,无需将 .ui 文件转换为 Python 代码。确保 .ui 文件的路径是正确的,如果路径错误,uic.loadUi 将无法找到文件。
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from PyQt5 import uic
# 假设你的.ui文件已经按照Python文件的方式生成,并且命名为'my_design.ui'
ui_filename = './ui/untitled1.ui'
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# 加载.ui文件
uic.loadUi(ui_filename, self)
if __name__ == '__main__':
# 创建QApplication类的实例
app = QApplication(sys.argv)
# 创建一个窗口
window = MainWindow()
# 设置窗口的标题
window.setWindowTitle("Hello World")
# 显示窗口
window.show()
# 进入程序的主循环
sys.exit(app.exec_())
因为这里在使用工具的时候,选择的是MainWindow
窗口,所以对应的MainWindow类集成QMainWindow。ui文件存放在当前项目的ui文件夹下。
使用命令,将ui文件转化为py文件,python -m PyQt5.uic.pyuic
是转换 .ui 文件的主要命令,其基本格式如下:
python -m PyQt5.uic.pyuic input.ui -o output.py
其中:
参数说明
或者可以使用pyuic命令进行ui文件转换,pyuic5 是 PyQt5 提供的一个命令行工具,用于将 .ui 文件转换为 Python 代码。这个工具是 uic 模块的一部分,可以通过命令行直接调用。基本的命令格式如下:
pyuic5 input.ui -o output.py
常用选项
之后,导入自定义 UI 类,将生成的py文件导入到主py里面,例如:
from pyui.pyui1 import Ui_MainWindow
进行设置用户界面,创建 Ui_MainWindow 的实例,并调用它的 setupUi 方法,将 Qt Designer 中的设计应用到 window 实例上。
ui = Ui_MainWindow()
ui.setupUi(window)
注意:其中实例化window窗口的类,要和
QtDesigner
工具选择的窗口一样、
代码展示
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from pyui.pyui1 import Ui_MainWindow
if __name__ == '__main__':
# 创建QApplication类的实例
app = QApplication(sys.argv)
# 创建一个窗口
window = QMainWindow()
# 将py文件添加到窗口
ui = Ui_MainWindow()
ui.setupUi(window)
# 显示窗口
window.show()
# 进入程序的主循环
sys.exit(app.exec_())
在PyQt5中,信号与槽(signals and slots)机制是实现控件间交互的核心机制。信号是当某个事件发生时由控件发出的,而槽是一个可以响应信号的函数。
基本概念
要连接一个信号到一个槽函数,可以使用QObject的connect方法。以下是一个简单的例子,展示了如何连接QPushButton的clicked信号到一个槽函数:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
def on_any_button_clicked():
print("任意按钮被点击了!")
app = QApplication([])
window = QWidget()
button1 = QPushButton("按钮1", window)
button2 = QPushButton("按钮2", window)
button1.clicked.connect(on_any_button_clicked)
button2.clicked.connect(on_any_button_clicked)
window.show()
app.exec_()
一个信号也可以连接到多个槽函数,当信号被触发时,所有连接的槽函数都会被依次调用。此外还可以通过QtDesigner工具
进行信号与槽的设置。下列例子是通过控制复选框,进行输入框的显示与隐藏。
在开发桌面应用程序时,页面跳转是一个常见的需求。无论是从登录页面跳转到主页面,还是从一个功能页面跳转到另一个功能页面,理解和掌握页面跳转的思路和流程是至关重要的。核心思路是创建和管理多个窗口实例。
close()
方法,关闭当前页面窗口。在PyQt5中,可以通过调用一个控件的window()方法来获取包含该控件的顶层窗口对象。这对于在页面跳转或其他需要访问当前窗口的场景中非常有用。顶层窗口对象指的是应用程序中最外层的窗口,它通常是QMainWindow或QDialog的实例。顶层窗口是用户直接与之交互的窗口,它包含了所有的子控件和布局。
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("主窗口")
self.resize(400, 300)
self.centralwidget = QWidget(self)
self.setCentralWidget(self.centralwidget)
layout = QVBoxLayout()
self.centralwidget.setLayout(layout)
self.button = QPushButton("点击我", self.centralwidget)
layout.addWidget(self.button)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
在这个示例中,MainWindow是一个顶层窗口对象,它继承自QMainWindow。我们在MainWindow中添加了一个按钮作为子控件。用户可以直接与这个顶层窗口进行交互。可以直接在对应的事件响应函数使用:self.centralwidget.window().close()
进行关闭当前窗口。