python使用PyQt5制作GUI程序

python使用PyQt5制作GUI程序

本篇文章主要记录使用 Qt Designer来制作PyQt5的GUI界面模板,然后编写相应的python代码来实现其功能

PyQt5

PyQt5 是一个用于创建图形用户界面 (GUI) 应用程序的 Python 模块。它是 PyQt 库的最新版本,基于 Qt 库,提供了丰富的 GUI 组件和工具,可以帮助开发人员快速地创建跨平台的桌面应用程序。

Qt Designer

Qt Designer 是一个用于创建和编辑 Qt 用户界面的可视化设计工具。它是 Qt 工具集中的一部分,可以通过 Qt Creator 或者独立运行来使用。

使用 Qt Designer,你可以通过拖放和选择 UI 组件来快速地设计和布局用户界面。这些组件包括按钮、文本框、标签、菜单等。在设计过程中,你可以随时预览实际效果,修改并调整组件属性、样式和布局。此外,你还可以在 Qt Designer 中添加自定义控件或者代码片段,以满足自己的需求。

准备工作:安装

我们使用pip来安装PyQt5:

  • pip install PyQt5

我们使用pip来安装PyQt5-Tools:

  • pip install PyQt5

当然,这样安装的速度会非常的慢,

这时我们使用-i指定豆瓣镜像来快速安装:

  • -i https://pypi.douban.com/simple

安装好之后我们可以在python的根目录搜索designer.exe,如图:

在这里插入图片描述

我们新建快捷方式到桌面,就可以方便使用了。

初步尝试

我们进入到designer.exe后可以看到如图所示的界面:

在这里插入图片描述

我们选择Main Window,来创建一个窗口项目,如图所示:

在这里插入图片描述

我们大致将该程序界面分为三个区域:控件区、窗口展示区、参数查看修改区,也就是用红边框标记的区域。

添加控件

我们只需要在控件选择区选择一个控件将其拖拽至窗口中的指定位置即可。比如我们先来选择一个button控件将其添加至窗口,如图所示:

在这里插入图片描述

这样就实现了控件的添加。

属性的修改

我们可以双击该控件来修改其文本属性

在这里插入图片描述

当然,我们也可以选择修改右边区域的文本属性的参数,如图所示:

在这里插入图片描述

到这里,我们基本上就可以实现制作任意类型的窗口界面了,也是非常的简单。

功能添加

窗口界面做的再精致又能怎么样?说罢了就是一个摆设,我们最终还得给它添加功能,实现它的作用。

本次我们就实现一个简单的功能作为示例:点击按钮输出1-100之内的数值,每个0.1秒输出一个,并且显示进度条。

*1、*首先将窗口拉小,并添加文本框,以及进度条:

在这里插入图片描述

*2、*将文件保存至自定义目录,我们会看到一个以.ui结尾的文件、

*3、*在文件的根目录下键入命令:pyuic5 -o ui.py untitled.ui

  • 该命令的作用是将指定的ui文件转换输出为一个py文件

  • -o py_file ui_file 指定将一个ui文件输出为一个py文件

效果如图所示:

在这里插入图片描述

*4、*我们再创建一个outnum.py文件。

*5、*然后我们打开ui.ui这个py文件来看看源代码:

在这里插入图片描述

可以看到,这是用PyQt5写的界面模板。

*6、*然后我们在outnum.py文件中添加代码来引用该界面模板添加相应的功能:

import sys,time
from ui import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtCore import QTimer

class Mywin(QMainWindow,Ui_MainWindow):
    def __init__(self):
        super(Mywin,self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.num_show)
    def num_show(self):
        self.qtime = QTimer()
        self.qtime.timeout.connect(self.show_num)
        self.qtime.start(100)

    def show_num(self):
        a = self.progressBar.value()+1
        self.progressBar.setProperty("value",a)
        self.textBrowser.insertPlainText(str(a)+"\r\n")
        if a == 100:
            self.qtime.stop()
            self.progressBar.setProperty("value",100)


app = QApplication(sys.argv)

mywin = Mywin()
mywin.show()

sys.exit(app.exec_())

效果如图所示:

在这里插入图片描述

  • 我们会发现,每隔0.1秒就会有一个数字打印,直到打印到100

  • 注意:当我们再次点击按钮时就会循环打印101,这时我们可以添加一个重置清除按钮,编写对应的重置清除方法来实现功能。这个时候我们不要去改ui.py文件,只需将.ui文件拖拽至Qt Designer程序添加控件然后保存之后键入转换为.py文件的命令覆盖掉之前的py模板文件即可。

我们先来解释以下这些代码:

  • 我们首先导入了一些所需模块:ui、PyQt5.QtWidgets、PyQt5.QtCore,可以看到ui是我们的界面模板。

  • 然后定义了一个Mywin类,这个类继承了QMainWindowUi_MainWindow

  • 然后我们在初始化方法__init__中使用了super(Mywin, self).__init__()调用了父类 (即 QMainWindow) 的__init__()方法,确保正确地初始化了父类的属性和方法。这是为了避免子类和父类之间出现命名冲突等问题。

  • num_show(self)方法中,我们使用了PyQt5中的计时器:QTimer()来实现按时打印数字。通过self.qtime.timeout.connect(self.show_num)连接打印功能的方法,通过self.qtime.start(100)来按时触发该定时器。

  • 可以看到show_num(self)这个方法就是实现打印数字的功能,每次触发定时器时都会让a加上进度条的进度,然后更新进度条,打印a这个数字在文本框,当触发定时器一直到a的值为100,则停止该定时器。

其实在show_num(self)这个方法中我开始是这样写的:

def num_show(self):
    a = 0
    for i in range(101):
        self.progressBar.setProperty("value", i)
        self.textBrowser.insertPlainText(str(i)+"\r\n")
        time.sleep(0.1)
    self.progressBar.setProperty("value", 100)

结果就是,程序打印数字运行一段时间打了一些数字之后就会卡住,然后就把剩余数字一瞬间全打出来

这是因为 num_show() 函数中使用了 time.sleep(0.1) 的方法,导致程序会暂停 100ms 才能执行下一次循环。而在 PyQt5 中,事件循环 (event loop) 是非常重要的,它负责接收、分发和处理所有事件,包括鼠标点击、键盘输入等用户交互事件。当使用 time.sleep() 这样阻塞式的操作时,事件循环也会被挂起,无法响应其他事件。这就是为什么程序会卡住,直到循环结束后才会一次性将数字全打出来。

所以改进后的代码我改成了使用定时器来完成该操作。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anonymous_who_am_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值