PyQt5 的安装与使用

2,699 阅读3分钟

安装

pip install pyqt5
pip install pyqt5-tools

pyqt 的安装有两个, pyqt5pyqt5-tools,前者是运行 pyqt 所需要各种库,后者则是官方提供的一些工具。如果只是想运行 pyqt 编写的程序,只安装前者即可,如果想使用官方的界面设计工具设计界面,则需要把后者也安装上。

UI 绘制

UI 绘制有两种方式,一种是纯代码编写,另一种是使用 pyqt5-tools 里的可视化工具 designer.exe 进行绘制,然后通过 pyuic5 命令将绘制的 UI 转换为代码。本文主要介绍如何使用可视化工具进行绘制。

designer.exe 位于安装目录的 Library\bin 下,也可以在命令行中直接输入文件名调用。

主 UI

软件有预置了一些模板,分别是三种形式的对话框、主窗口和 widget 。软件主界面左边栏是控件,右边是对象查看器和属性编辑器。

控件的添加很简单,从左边栏中选中往窗口里拖动即可,在右边栏可以修改控件名称、文案等各种状态。

pyqt 里控件的各种功能均是通过信号/槽实现的,信号是控件在状态变化时发出的通知,如按钮在点击时会发出一个 click 信号,槽是窗体类的类方法,如关闭窗口方法 close ,信号与槽是多对一关系。绑定后即可通过信号去触发相应的方法。

designer 里可以为控件的信号绑定一些默认方法。实现方式是点击菜单栏 "Edit" -> "编辑信号/槽" ,然后在编辑状态下点选控件并拖动至空白区域,在弹出窗口即可为控件的信号绑定槽。

绑定信号

designer 里只有默认的一些槽,要实现更丰富的功能需要在代码里手动为控件设置信号槽。设置代码为 {控件}.{信号/如clicked}.connect({要调用的方法})

保存后会生成 .ui 文件,需要经过转换后才能被代码调用,转换命令为:

pyuic5 XXX.ui -o XXX.py

如果使用的是 pycharm ,可以在 Settings->Tools->External Tools 里为 designerpyuic5 命令新建对应的 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 程序到此就可以运行起来了。