python-pyqt5使用
开发桌面小应用, ui 可视化编辑 + 脚本逻辑 无疑爽的一批.
前篇
- Python GUI:PyQt安装及使用 - https://zhuanlan.zhihu.com/p/34290435
- 如今 Windows 软件开发究竟该用什么库 - https://www.zhihu.com/question/24461881/answer/140104855
安装
安装
pyqt5
和pyqt5-tools
这两个库1
2$ pip3 install pyqt5
$ pip3 install pyqt5-tools安装完后, 在 python 安装目录下可以找到可执行程序 Lib\site-packages\pyqt5_tools\Qt\bin\designer.exe, 但是点击打开会弹窗错误:
this application failed to start...
, 原因是找不到相关 windows 库.解决办法: 将
Lib\site-packages\PyQt5\Qt\plugins
的platforms
目录拷贝到Lib\site-packages\pyqt5_tools\Qt\bin
下覆盖. 然后就可以打开 designer.exe. (参考: https://stackoverflow.com/questions/61324972/pyqt5-designer-is-not-working-this-application-failed-to-start-because-no-qt-pl)
pycharm 配置
参考: https://blog.csdn.net/mawei7510/article/details/81450032
配置快捷打开 designer.exe 和 生成 xxx.ui
对应的 py 工具
添加 designer.exe
添加
xxx.ui
对应的 py 工具workding directory: 是指执行命令的地方, 这里我指定到一个 generate 目录
测试一下
最终执行的命令:
D:\Python38-32\Scripts\pyuic5.exe -o test.py F:\a_link_workspace\python\pyqt5-gui\ui\test.ui
hello world 初探
使用默认的模板, 导出为布局文件 test.ui
生成对应的 python 代码.
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(290, 20, 81, 71))
self.buttonBox.setOrientation(QtCore.Qt.Vertical)
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept) # Dialog.accept 就是按钮 ok 绑定的方法, 要自己实现
self.buttonBox.rejected.connect(Dialog.reject) # Dialog.reject 就是按钮 cancel 绑定的方法, 要自己实现
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))编写入口 main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# -*- coding: utf-8 -*-
import os
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from generate import test
# 自定义逻辑, 继承 QtWidgets.QWidget
class CLogin(QtWidgets.QWidget):
def __init__(self):
QtWidgets.QWidget.__init__(self)
# ok 按钮
def accept(self):
print("--- hello accept")
# cancel 按钮
def reject(self):
print("--- hello reject")
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
widget = CLogin() # 实例化 自定义逻辑
ui = test.Ui_Dialog()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())执行 main.py
1
$ python3 main.py