安装
pip install pyqt5
pip install pyqt5-tools
pyqt 的安装有两个, pyqt5
和 pyqt5-tools
,前者是运行 pyqt 所需要各种库,后者则是官方提供的一些工具。如果只是想运行 pyqt 编写的程序,只安装前者即可,如果想使用官方的界面设计工具设计界面,则需要把后者也安装上。
UI 绘制
UI 绘制有两种方式,一种是纯代码编写,另一种是使用 pyqt5-tools
里的可视化工具 designer.exe
进行绘制,然后通过 pyuic5
命令将绘制的 UI 转换为代码。本文主要介绍如何使用可视化工具进行绘制。
designer.exe
位于安装目录的Library\bin
下,也可以在命令行中直接输入文件名调用。
软件有预置了一些模板,分别是三种形式的对话框、主窗口和 widget 。软件主界面左边栏是控件,右边是对象查看器和属性编辑器。
控件的添加很简单,从左边栏中选中往窗口里拖动即可,在右边栏可以修改控件名称、文案等各种状态。
pyqt 里控件的各种功能均是通过信号/槽实现的,信号是控件在状态变化时发出的通知,如按钮在点击时会发出一个 click
信号,槽是窗体类的类方法,如关闭窗口方法 close
,信号与槽是多对一关系。绑定后即可通过信号去触发相应的方法。
在 designer
里可以为控件的信号绑定一些默认方法。实现方式是点击菜单栏 "Edit" -> "编辑信号/槽" ,然后在编辑状态下点选控件并拖动至空白区域,在弹出窗口即可为控件的信号绑定槽。
designer
里只有默认的一些槽,要实现更丰富的功能需要在代码里手动为控件设置信号槽。设置代码为{控件}.{信号/如clicked}.connect({要调用的方法})
保存后会生成 .ui
文件,需要经过转换后才能被代码调用,转换命令为:
pyuic5 XXX.ui -o XXX.py
如果使用的是 pycharm ,可以在 Settings->Tools->External Tools
里为 designer
和 pyuic5
命令新建对应的 External Tools 以易于调用。不过在 External Tools 里调用 pyuic5
的 Arguments 的内容与命令行调用时不一样,应为:
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
在 ui 文件上右击,从 External Tools 里调用即可。
转换完成之后,会得到这样的一个 UI 类,供程序设置 UI 时调用。
class Ui_TraySetting(object):
def setupUi(self, TraySetting):
TraySetting.setObjectName("TraySetting")
TraySetting.resize(684, 410)
self.label = QtWidgets.QLabel(TraySetting)
self.label.setGeometry(QtCore.QRect(30, 40, 91, 20))
self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
def retranslateUi(self, TraySetting):
_translate = QtCore.QCoreApplication.translate
TraySetting.setWindowTitle(_translate("TraySetting", "托盘设置"))
self.label.setText(_translate("TraySetting", "打开"))
代码调用
在创建了 UI 之后,需要在 UI 类的基础上创建控制类,创建方式如下:
from PyQt5.QtWidgets import QMainWindow
class TraySetting(QMainWindow, Ui_TraySetting):
def __init__(self, parent=None):
super(TraySetting, self).__init__(parent)
self.setupUi(self)
... # 其他初始化设置
创建好控制类后,就可以通过控制类的实例来展示窗口了,代码如下:
import sys
from PyQt5.QtWidgets import QApplication
if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = ImageManager()
myWin.show()
sys.exit(app.exec_())
一个基础的 pyqt 程序到此就可以运行起来了。