python小工具开发源码_Qt Designer极速开发python桌面小工具详解

本教程详细讲解如何使用Qt Designer开发Python桌面应用,以汇率转换为例,涵盖组件自适应、保存UI文件、生成Python代码、设置按钮触发逻辑、使用functools.partial传递参数以及解决长时间运行导致的界面卡死问题。
摘要由CSDN通过智能技术生成

8、组件自适应

点击画布空白处,然后在上方工具栏找到 下图四种布局,在本例中我们使用栅格布局(grid layout),即第三种。

2a59dfc548361d8ca9b191686f66349c.png

我们再次使用Ctrl+R预览,这次组件可以自适应了!

5d4a40365e6515bc507b833884b07919.png

9、保存

如果觉得完成了,那就可以保存成*.ui的文件(快捷键:Ctrl+S),这里我们保存为conversion.ui。为了方便演示,我将文件保存到D盘新建目录QT下。

10、生成Python代码

使用cmd将目录切到目录 D:/QT 并执行下面的命令。请自行将下面命令中的name替换成文件名,比如本例中的“conversion.ui”

pyuic5 -o conversion.py conversion.ui

67ba1f3c1c1397161b216963e563bd83.png

生成的代码应该类似下图所示

29a103a3e14337072fd934840e1f427a.png

11、运行Python代码

此时尝试运行刚刚生成的“conversion.py”是没用的,因为生成的文件并没有程序入口。因此我们在同一个目录下另外创建一个程序叫做“main.py”,并输入如下内容。在本例中,gui_file_name就是conversion,请自行替换。

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow

import gui_file_name

if __name__ == '__main__':

app = QApplication(sys.argv)

MainWindow = QMainWindow()

ui = gui_file_name.Ui_MainWindow()

ui.setupUi(MainWindow)

MainWindow.show()

sys.exit(app.exec_())

然后运行“main.py”,你就能看到刚刚编写的GUI了!

15cfbf7fed6edc4735c4a6dd7687f966.png

四、实现汇率换算逻辑

刚刚写的汇率换算器中,我们设置的按钮(PushButton)是没有实际作用的,因为我们并没有告诉这个按钮应该做什么。实际上,要让这个按钮做点什么只需要增加一行代码就可以了。

1、获取按钮id

打开conversion.ui,在designer中选中对应的按钮,从“属性编辑器”中可以得知这个按钮的“objectName”叫做“pushButton”,如下图所示。

3e89514cff18f4a70ba5c79680c88097.png

2、设置触发

QT中有“信号和槽(signal and slot)”这个概念,不过目前无需深究,也无需在Designer中去设置对应按钮的“信号和槽”,直接在“main.py”中“MainWindow.show()”的后面加入下面这样的一行代码

ui.pushButton.clicked.connect(click_success)

下面简单解释下这行代码:

pushButton就是刚刚获取的按钮id;

clicked就是信号,因为是点击,所以我们这里用clicked;

click_success就是对应要调用的槽,注意这里函数并不写成click_success();

3、设置函数

既然刚刚设置了按钮的触发并绑定了一个函数click_success,我们就要在“main.py”中实现它。示例如下

def click_success():

print("搞定了!")

4、运行!

UI跟逻辑分离的好处就在这里,我们这次不用去管“conversion.py”了,直接运行修改完的“main.py”。点击按钮,这次你会发现在控制台中有了我们预设的输出。

21566121f454426cb354ab3ec33b6484.png

5、回到正题,我们这里需要通过UI传参实现汇率的转换

对于传参,有两种解决方案,一种是使用lambda,还有一种是使用functool.partial。在接下来的环节中我们会使用partial。

partial的用法如下所示:

partial(function, arg1, arg2, ......)

既然使用partial传参,那么我们就要在程序(main.py)的头部加上下面这行。

from functools import partial

然后我们把步骤2的按钮触发那行代码修改成下面这样。

ui.pushButton.clicked.connect(partial(convert, ui))

6、编写convert函数

首先,我们要获取用户输入的数字。为了使得教程简洁易懂,我们这次只讲解单向的汇率转换。既然是单向的转换,那么我们只需要获取左侧的文本框id。在本例中,左侧的文本框id为lineEdit。如果你对此感到一头雾水,请停下并回头复习。

获取文本使用的是text()方法,因此读取用户输入的代码如下

input = ui.lineEdit.text()

接着我们进行汇率转换,注意这里要进行类型转换

result = float(input) * 6.5344

最后我们让右边的文本框显示结果

ui.lineEdit_2.setText(str(result))

下面是main.py的完整代码

import sys

from PyQt5.QtWidgets import QApplication, QMainWindow

from functools import partial

import conversion

def convert(ui):

input = ui.lineEdit.text()

result = float(input) * 6.5344

ui.lineEdit_2.setText(str(result))

if __name__ == '__main__':

app = QApplication(sys.argv)

MainWindow = QMainWindow()

ui = conversion.Ui_MainWindow()

ui.setupUi(MainWindow)

MainWindow.show()

ui.pushButton.clicked.connect(partial(convert, ui))

sys.exit(app.exec_())

一个简单的汇率转换器就这样诞生了!

0932c19c057636079f7d31030d199ece.png

那么,如何知道一个组件都有什么方法呢?直接去Qt官方文档查看就可以了。本节使用到的lineEdit的相关方法在这里。

五、线程执行逻辑

当我们实现复杂的逻辑,处理时间较长时,此时界面就会出现“未响应”。如我实现一个对网站生成sitemap的工具,点击按钮运行后出现卡死,如下图所示。

8444fb08c9672ee525876c055dd66d48.png

1、问题原因

本文由51ste.com网友编辑,未经授权,不得转载使用上述作品盈利;个人转载,需标明作者及出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值