python Qt designer 图形界面编程实战

1 篇文章 0 订阅
订阅专栏

1、概述

      最近做一个模块的开发,刚开始参数是在主函数修改,后来项目需要有一个用户交互界面,方便调试,于是在网上学习了python Qt图形界面的开发( Python Qt 图形界面编程,很实用也很详细的视频课程),顺利完成项目需求,为此写一篇使用教程,供大家参考。
      先看一个自己以租车比价做的例子。有一款名为IGO的租车平台,它有分时用车、2小时套餐、4小时套餐、日租套餐等,每个都有包含的公里数和小时数(分时用车除外),有时候自己租车会计算比价,就想着自己做一个软件出来方便选择套餐,其中的参数均可以手动修改,部分参数有默认值即平台设置的值。界面及操作演示如下:
在这里插入图片描述

      本文主要演示如何使用自己设计的图像界面,例如如何使用多线程打印输出以及不使用多线程会有什么问题,还有就是如何将自己的代码和用户交互、如何弹出提示信息,如何发布自己的程序。

2、相关库安装

pip install pyside2

如果安装过程较慢,可以参考: 通过国内镜像下载python库
安装好以后后,在所在python的库安装目录中就有Qt designer的启动程序。
在这里插入图片描述
      新建一个widget:可以设计自己的界面,具体模块可以参考上述视频教程,这里给出即将要演示的已经做好的demo界面,主要是有一个输出文本框(lineEdit)、展示文本框(textBrowser)、两个命令按钮(pushButton),界面如下:
在这里插入图片描述
      将设计模块保存后(.ui文件,本文保存为:demo.ui, demo ui链接, 提取码:5188 )即可利用PySide2中的相关模块进行动态加载。

3、示例代码

from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QWidget, QApplication, QMessageBox
from PySide2.QtCore import Signal, QObject
from threading import Thread
import time

class MySignals(QObject):
    # 定义一种信号,参数为字符串
    text_print = Signal(str)

class Stats(QWidget):

    def __init__(self):
        super().__init__()
        self.ui = QUiLoader().load('demo.ui')
        # 实例化
        self.ms = MySignals()
        # 自定义信号的处理函数
        self.ms.text_print.connect(self.printToGui)
        self.ui.pushButton.clicked.connect(self.print_info_multithread)
        self.ui.pushButton_2.clicked.connect(self.output_msg)

    def printToGui(self, text):
        """
        向文本展示框中添加输出信息
        """
        self.ui.textBrowser.append(str(text))

    def output_msg(self):
        """
        演示弹出对话框信息
        """
        QMessageBox.information(self, "提示", "参数已保存!")

    def print_info_multithread(self):
        """
        演示利用多线程打印输出信息
        """
        def run():
            # 通过Signal 的 emit 触发执行 主线程里面的处理函数
            # emit参数和定义Signal的数量、类型必须一致
            input = int(self.ui.lineEdit.text())  # 演示用户交互接口
            for i in range(input):
                self.ms.text_print.emit('输出内容_{}'.format(i))
                time.sleep(1)
        thread = Thread(target=run)
        thread.start()

    def print_info_no_multithread(self):
        """
        演示不使用多线程打印输出信息
        """
        for i in range(5):
            self.ui.textBrowser.append('输出内容_{}'.format(i))
            time.sleep(1)

app = QApplication()
stats = Stats()
stats.ui.show()
app.exec_()

4、演示结果

(1)多线程的打印输出演示:
在这里插入图片描述
(2)不使用多线程输出演示:
即在class Stats的初始化中:

self.ui.pushButton.clicked.connect(self.print_info_multithread)

更改为:

self.ui.pushButton.clicked.connect(self.print_info_no_multithread)

在这里插入图片描述
      上述两者的区别是,当点击输出时,利用多线程打印展示框时同步输出的,而不使用双线程打印,文本展示框的是阻塞的。
      自己设计界面肯定是用多线程的方法,这里主要展示有可能遇到的错误(自己刚开始也没搞通这个,因为看视频理解错误了)。

5、程序发布

      当我们的界面和程序代码完成后,就可以完成发布了,生成.exe供别人使用。手续需要安装程序打包的python库——pyinstaller:

pip install pyinstaller

      安装完成后进入到,自己程序所在目录,例如运行的python文件为Qt_designer_demo.py:

pyinstaller Qt_designer_demo.py --noconsole --hidden-import PySide2.QtXml

      最后在所在文件目录中的dist文件夹下,会得到一个包含Qt_designer_demo.exe的Qt_designer_demo文件,记得要把demo.ui放到Qt_designer_demo文件夹中,否则加载不了.ui文件,双击exe程序可以看到跟直接运行代码效果一致。
在这里插入图片描述

至此,一个基本的Qt 图像交互界面就完成了,过程也不是很麻烦,自己可以通过Qt designer设计适合自己的界面。

6、.ui转化成python文件

      可能有时候我们不想用动态加载.ui的方法,因为我们每次发布程序后都需要把.ui文件手动移到pyinstaller 生成的文件夹下。这是我们可以利用pyuic5命令将我们生成的.ui文件转化成python文件,然后再调用即可,转化命令为:

pyuic5 -o demo_ui.py demo.ui

      这是我们得到一个demo_ui.py文件,里面是一个包含设计界面的class:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'multithread_print.ui'
# Created by: PyQt5 UI code generator 5.15.0
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(445, 307)
        self.verticalLayout = QtWidgets.QVBoxLayout(Form)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        '''此处代码较长,省略部分代码'''

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Qt演示"))
        self.label.setText(_translate("Form", "请输入你的数字:"))
        self.pushButton.setText(_translate("Form", "输出"))
        self.pushButton_2.setText(_translate("Form", "保存"))

      为了保持与之前的使用PySide2模块的代码基本一致(PyQt5与PySide2的模块架构基本类似),我们把demo_ui.py中的:

from PyQt5 import QtCore, QtGui, QtWidgets

更改为:

from PySide2 import QtCore, QtGui, QtWidgets

      我们再对原来的运行程序进行修改即可,我们这里我们做了以下更改:
(1)增加模块导入:from demo_ui import Ui_Form
(2)class Stats(QWidget)更改为:class Stats(QWidget, Ui_Form)
(3)初始化中增加:self.setupUi(self)
(4)将相关的self.ui.xxx中的.ui去掉,例如:self.ui.textBrowser.append(str(text))更改为:self.textBrowser.append(str(text))

      具体修改后的代码如下,运行后与动态加载.ui文件方法一致

from PySide2.QtCore import Signal, QObject
from PySide2.QtWidgets import QWidget, QApplication, QMessageBox
from threading import Thread
from demo_ui import Ui_Form
import time

class MySignals(QObject):
    # 定义一种信号,参数为字符串
    text_print = Signal(str)

class Stats(QWidget, Ui_Form):
    def __init__(self):
        super(Stats,self).__init__()
        self.setupUi(self)
        self.ms = MySignals()
        # # 自定义信号的处理函数
        self.ms.text_print.connect(self.printToGui)
        self.pushButton.clicked.connect(self.print_info_multithread)
        self.pushButton_2.clicked.connect(self.output_msg)
    def printToGui(self, text):
        """
        向文本展示框中添加输出信息
        """
        self.textBrowser.append(str(text))

    def output_msg(self):
        """
        演示弹出对话框信息
        """
        QMessageBox.information(self, "提示", "参数已保存!")

    def print_info_multithread(self):
        """
        演示利用多线程打印输出信息
        """
        def run():
            # 通过Signal 的 emit 触发执行 主线程里面的处理函数
            # emit参数和定义Signal的数量、类型必须一致
            input = int(self.lineEdit.text())  # 演示用户交互接口
            for i in range(input):
                self.ms.text_print.emit('输出内容_{}'.format(i))
                time.sleep(1)
        thread = Thread(target=run)
        thread.start()
        
app = QApplication()
stats = Stats()
stats.show()
app.exec_()
Qt DesignerPython:更快地构建您的 GUI 应用程序
mopanchun的博客
11-21 944
Designer旨在为创建 PyQt5 应用程序提供一个轻量级但功能强大的解决方案。它使得通过拖放创建GUI 应用程序成为可能。它基于使用 Qt DesignerQt 框架,Qt Designer 是一个可视化布局和表单编辑器。对于那些熟悉 Python GUI 编程的人来说,您可能已经使用过tkinter GUI 库。PyQt 应用程序可以用多种方式编写:纯 Python、QML(及其工具)或 Qt Designer 的形式。PyQt Designer 的一些好处:生成的代码完全是
Python开发环境下轻松安装Qt Designer,开启高效图形用户界面 (GUI) 开发之旅
smallql1314的博客
03-12 1958
之前的文章《》简单介绍了Python环境下如何使用Qt Designer,有很多读者问安装Qt Designer的方法和其他一些问题。这里我们进一步介绍一下在Python开发环境下安装和使用Qt DesignerQt DesignerQt 框架中功能强大的,它使开发人员能够轻松、快速地构建用户友好的界面。Qt Designer解决了复杂界面的设计问题。虽然理论上可以用纯代码构建复杂界面,但随着界面复杂度增加而难度过大。Qt Desinger提供了用鼠标拖拽设计界面的功能,然后。
Python + Qt Designer:轻松打造大型复杂图形用户界面 (GUI)
m0_59236127的博客
04-12 1815
Python 是一个功能强大的编程语言,但直接使用pyqt代码打造大型复杂GUI难度较大,而 Qt Designer 是一个直观的图形用户界面 (GUI) 设计工具,结合这两者,您可以轻松创建美观且用户友好的大型应用程序。本文将指导您使用 PythonQt Designer 设计 GUI 的各个方面,让您打造出色的用户体验。
Python GUI开发- Qt Designer环境搭建
最新发布
qq_27371025的博客
05-15 649
Qt Designer是PyQt5 程序UI界面的实现工具,使用 Qt Designer 可以拖拽、点击完成GUI界面设计,并且设计完成的 .ui 程序可以转换成 .py 文件供 python 程序调用
pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮2输出消息、按钮3可退出
春风若是你的博客
06-03 6152
pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮三可退出 目标:设计一个含有三个按钮的窗口,点击按钮2弹出消息,点击按钮3退出 如果是使用的anacoda那么自带qtdesiger,搜索qt.exe即可,建议使用everything进行搜索。如qt不能打开,参考:https://blog.csdn.net/weixin_43245453/article/detail...
python -- PyQt5(designer)中文详细教程(一)Qt的基本功能
weixin_64338372的博客
12-03 6772
PyQt5 是Digia的⼀套Qt5应⽤框架与python的结合,同时⽀持2.x和3.x。本教程使⽤的是3.x。Qt库 由Riverbank Computing开发,是最强⼤的GUI库之⼀ ,官⽅⽹站www.riverbankcomputing.co.uk/news。
【PyQt5】(02)Qt Designer:快速设计GUI界面的利器
CynalFly的博客
06-06 5083
Qt Designer是一个图形界面设计工具,用于创建Qt应用程序的用户界面。它支持创建典型的窗口和对话框,并允许使用各种小部件(widget)和布局管理器(layout manager)。
pythonQt Designer工具的使用方法
zhaochongsi的博客
09-17 2万+
一、Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具,Qt Designer工具使用简单,可以通过拖拽和点击完成复杂界面设计,并且设计完成的.ui程序可以转换成.py文件供python程序调用。本文主要通过用户登录需求描述Qt Designer工具开发界面的使用方法。 二、Qt Designer工具主界面 方法一:tools–External Tools–Qt Designer 配置过程可点击链接查看详情:Qt Designer工具相关安装配置 方法二:打开路径:${py
python】软件开发——PyQt5、Qt Designer、信号与槽机制、计算器实现
urge的博客
09-29 2667
PyQt5 是一个基于 Python 的 GUI 框架,用于创建跨平台的桌面应用程序。它是 Qt 库的 Python 绑定,结合了 Python 的简洁和易用性以及 Qt 框架的强大功能。 Qt 是一个流行的 C++ 跨平台应用程序开发框架,提供了丰富的图形界面组件、网络通信、数据库访问、多线程等功能。PyQt5 允许开发者使用 Python 语言来创建 Qt 应用程序,从而可以轻松地利用 Qt 提供的功能,并且能够在多个操作系统上运行,包括 Windows、MacOS、Linux 等。
【界面】使用QT designerpython搭建界面程序
tobefans的博客
06-24 5656
PyQtPython语言的GUI编程解决方案之一,是类似于 Tkinter 的一个高级库。 为了更好的辅助PyQt界面的搭建,可以通过Qt Designer完成GUI界面设计。 使用Qt Designer可以通过拖拽、点击完成GUI界面设计,并且设计完成后生成的.ui程序可以通过 pyuic5 命令直接转换成.py文件以供python程序调用。 搭建完界面并写好逻辑后,还可通过 pyinstaller 将.py文件封装成.exe文件,以供没有python解释器的用户使用。 ...
基于python qt制作的二维码生成器.zip
05-14
【标题】:“基于python qt制作的二维码生成器.zip”是一个以Python编程语言和Qt图形库构建的二维码生成工具。这个项目适用于计算机科学、软件工程以及通信工程的学生进行课程设计或毕业设计,它提供了实践编程技能...
FantasyCric:使用PythonQtDesigner的幻想板球游戏
04-15
总的来说,"FantasyCric:使用PythonQtDesigner的幻想板球游戏"项目涵盖了Python编程、图形用户界面设计、数据库操作、网络通信和多线程等多个重要技术领域,为学习和实践这些技能提供了一个有趣的实战平台。
Python可视化界面编程课程 PyQt5实战网课 GUI在线视频基础教程
06-13
课程概述本课程主要针对PyQT5中的界面部分(GUI)进行学习,分为三部分,包括初级GUI编程、进阶GUI编程和GUI编程实战。初级GUI编程:从介绍编程环境搭建开始,然后分析最基础的单个窗口框架,接着介绍QT?Designer,...
qt5_python_GUI_programming_cookbook
12-10
Qt5_Python_GUI编程实战指南》是一本深入讲解如何使用Python进行图形用户界面(GUI)开发的专业书籍,尤其侧重于使用Qt库。Qt是一个功能强大的跨平台应用程序开发框架,而Python作为流行的脚本语言,结合Qt库可以...
Qt5实战项目之【天气预报】
05-06
可以使用Qt Designer工具创建初始界面布局,然后通过.ui文件转换为Python或C++代码。界面通常包括搜索框(QLineEdit)供用户输入城市名,一个结果显示区域(QLabel或QTextEdit)显示天气详情,以及可能的图像...
超全!Python图形界面框架PyQt5使用指南!
Python966的博客
08-10 1万+
使用Python开发图形界面的软件其实并不多,相对于GUI界面,可能Web方式的应用更受人欢迎。但对于像我一样对其他编程语言比如C#或WPF并不熟悉的人来说,未必不是一个好的工具。
一文带你读懂PyQt:用Python做出与C++一样的GUI界面应用程序
热门推荐
老猿Python
05-09 8万+
本文介绍了Python的图形化界面应用开发工具PyQt的功能和开发框架,通过PyQt的这些重要的工具、功能和框架机制,开发人员可以设计对应的GUI图形化界面、定义不同部件的操作及响应、捕获部件或应用的消息以及实现界面显示组件和数据存储组件的联动,从而构造完整的应用程序框架,最后提供了老猿实现的一些PyQt开发程序的界面来说明PyQt不同部件的界面风格。 通过以上内容的介绍,有助于对PyQtQt不了解的初学者提了解PyQt的基本开发框架、应用界面风格。
【PyQt5】designer 页面点击按钮跳转页面
2301_79055107的博客
04-05 488
终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!些内容对你有帮助,可以扫码获取!!(备注Java获取)**终极手撕架构师的学习笔记:分布式+微服务+开源框架+性能优化[外链图片转存中…(img-7LuHExlV-1712254462013)]《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
python qt designer界面跳转
03-16
Python中,使用Qt Designer可以创建GUI界面。要实现界面跳转,可以使用QStackedWidget控件。该控件可以在同一窗口中显示多个页面,只需在需要切换页面时更改当前页面即可。可以使用QPushButton等控件来触发页面切换事件,然后在事件处理函数中更改当前页面。具体实现可以参考Qt官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 火灾(火焰)数据集链接 24474
  • 像素坐标转到世界坐标时相机坐标系中的Zc值求解 18573
  • 简单Python爬虫获取指定网页内容示例 15977
  • yolov3-tiny 完整训练自己的数据集步骤(数据准备、模型训练和测试、计算mAP和recall) 15606
  • Python根据关键字逐行提取文本内容 14135

分类专栏

  • Tools 6篇
  • Hive 4篇
  • Yarn 2篇
  • Qt界面 1篇
  • Flmue 2篇
  • Zookeeper 2篇
  • MapReduce 3篇
  • HDFS 6篇
  • Hadoop 3篇
  • Shell编程 1篇
  • 数据分析 13篇
  • OpenCV 2篇
  • 图像处理 28篇
  • Linux开发 18篇
  • 深度学习 34篇
  • Python 9篇

最新评论

  • 6目摄像头照片球面投影变换拼接全景图片

    qq_49308348: 博主你好,请问您的测试图片是在哪里下载的呢,可以麻烦您给我提供一份吗

  • 像素坐标转到世界坐标时相机坐标系中的Zc值求解

    weixin_40277254: 如果以前上右为坐标系,目标点为原点建立世界坐标系,相机位置在X-Y平面,相机在世界坐标系中的坐标为(-100,100,0),那么Zw应该是多少呢

  • 像素坐标转到世界坐标时相机坐标系中的Zc值求解

    Sfbgfb: 本来Zw就不知道,Zc是没办法知道的吧

  • 像素坐标转到世界坐标时相机坐标系中的Zc值求解

    青子Ж: 相机光轴不一定垂直于拍摄平面,因此光心与实际平面上点距离不同,这也就是计算的zc会不同,,深度是个常量是指拍摄平面与相机相面平行?

  • 像素坐标转到世界坐标时相机坐标系中的Zc值求解

    青子Ж: 取决于标定时候的尺寸,一般mm

最新文章

  • python日期、时间戳和日期字符串之间的转换
  • CSDN如何将插入图片缩小并且居中
  • Flume 数据流监控——Ganglia的安装与部署
2023年1篇
2021年25篇
2020年24篇
2019年82篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南洲.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

PHP网站源码同乐网站设计西乡网站优化按天扣费吉祥SEO按天扣费松岗网站优化按天计费坪地建网站吉祥外贸网站建设丹竹头百度竞价包年推广龙岗seo优化同乐建设网站惠州建设网站光明网站优化双龙百度网站优化排名木棉湾网站设计吉祥网页制作民治seo民治设计网站罗湖网站设计民治网站制作爱联网站改版横岗百度竞价包年推广沙井关键词按天计费龙华百度竞价大鹏企业网站设计沙井百度竞价罗湖网页制作平湖网站改版同乐网站优化按天收费福永网站开发坂田百度seo南山网页设计歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化