python实战之PyQt5桌面软件

一. 演示效果

在这里插入图片描述

二. 准备工作

1. 使用pip 下载所需包 pyqt5

在这里插入图片描述

2. 下载可视化UI工具 QT Designer

链接:https://pan.baidu.com/s/1ic4S3ocEF90Y4L1GqYHPPA?pwd=ywct
提取码:ywct

3. 可视化UI工具汉化

把上面的链接打开, 里面有安装和汉化包, 前面的路径还要看你安装在哪里, 然后把汉化包直接放到这个文件夹中就可以了

在这里插入图片描述

4. pycharm配置QT Designer

pycharm配置QT
在这里插入图片描述

Arguments: -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py

QT Designer作用: 快速打开QT Designer布局工具
PyUIC作用: .ui布局文件转成.py布局文件, 也就是test.ui -> test.py

在这里插入图片描述

三. 代码

1. 文件结构

在这里插入图片描述

2. 代码

test.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"><class>MainWindow</class><widget class="QMainWindow" name="MainWindow"><property name="geometry"><rect><x>0</x><y>0</y><width>800</width><height>600</height></rect></property><property name="windowTitle"><string>MainWindow</string></property><property name="toolButtonStyle"><enum>Qt::ToolButtonIconOnly</enum></property><widget class="QWidget" name="centralwidget"><widget class="QLabel" name="label"><property name="geometry"><rect><x>250</x><y>90</y><width>91</width><height>41</height></rect></property><property name="font"><font><pointsize>16</pointsize><weight>50</weight><bold>false</bold></font></property><property name="text"><string>欢迎使用</string></property></widget><widget class="QLabel" name="label_2"><property name="geometry"><rect><x>370</x><y>90</y><width>181</width><height>41</height></rect></property><property name="font"><font><pointsize>16</pointsize><weight>75</weight><bold>true</bold></font></property><property name="text"><string>计时器</string></property></widget><widget class="QLabel" name="label_3"><property name="enabled"><bool>true</bool></property><property name="geometry"><rect><x>220</x><y>100</y><width>21</width><height>21</height></rect></property><property name="text"><string/></property><property name="pixmap"><pixmap>../resources/icon/icon.ico</pixmap></property><property name="scaledContents"><bool>true</bool></property></widget><widget class="QSlider" name="horizontalSlider"><property name="geometry"><rect><x>110</x><y>190</y><width>571</width><height>16</height></rect></property><property name="mouseTracking"><bool>false</bool></property><property name="orientation"><enum>Qt::Horizontal</enum></property></widget><widget class="QPushButton" name="pushButton"><property name="geometry"><rect><x>230</x><y>260</y><width>75</width><height>23</height></rect></property><property name="text"><string>开始计时</string></property></widget><widget class="QPushButton" name="pushButton_2"><property name="geometry"><rect><x>430</x><y>260</y><width>75</width><height>23</height></rect></property><property name="text"><string>重置计时</string></property></widget><widget class="QLabel" name="label_4"><property name="geometry"><rect><x>700</x><y>190</y><width>31</width><height>16</height></rect></property><property name="text"><string>0</string></property></widget></widget><widget class="QStatusBar" name="statusbar"/></widget><resources><include location="../resources/icon/qrcResources.qrc"/></resources><connections><connection><sender>horizontalSlider</sender><signal>sliderMoved(int)</signal><receiver>label_4</receiver><slot>setNum(int)</slot><hints><hint type="sourcelabel"><x>395</x><y>197</y></hint><hint type="destinationlabel"><x>715</x><y>197</y></hint></hints></connection><connection><sender>label_4</sender><signal>windowIconTextChanged(QString)</signal><receiver>horizontalSlider</receiver><slot>setFocus()</slot><hints><hint type="sourcelabel"><x>715</x><y>197</y></hint><hint type="destinationlabel"><x>395</x><y>197</y></hint></hints></connection><connection><sender>pushButton</sender><signal>clicked()</signal><receiver>label_4</receiver><slot>update()</slot><hints><hint type="sourcelabel"><x>267</x><y>271</y></hint><hint type="destinationlabel"><x>715</x><y>197</y></hint></hints></connection></connections>
</ui>

test.py

# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.15.10
#
# 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
from PyQt5.QtWidgets import QApplicationclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(800, 600)MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.label = QtWidgets.QLabel(self.centralwidget)self.label.setGeometry(QtCore.QRect(250, 90, 91, 41))font = QtGui.QFont()font.setPointSize(16)font.setBold(False)font.setWeight(50)self.label.setFont(font)self.label.setObjectName("label")self.label_2 = QtWidgets.QLabel(self.centralwidget)self.label_2.setGeometry(QtCore.QRect(370, 90, 181, 41))font = QtGui.QFont()font.setPointSize(16)font.setBold(True)font.setWeight(75)self.label_2.setFont(font)self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(self.centralwidget)self.label_3.setEnabled(True)self.label_3.setGeometry(QtCore.QRect(220, 100, 21, 21))self.label_3.setText("")self.label_3.setPixmap(QtGui.QPixmap("../resources/icon/icon.ico"))self.label_3.setScaledContents(True)self.label_3.setObjectName("label_3")self.horizontalSlider = QtWidgets.QSlider(self.centralwidget)self.horizontalSlider.setGeometry(QtCore.QRect(110, 190, 571, 16))self.horizontalSlider.setMouseTracking(False)self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal)self.horizontalSlider.setObjectName("horizontalSlider")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(230, 260, 75, 23))self.pushButton.setObjectName("pushButton")self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)self.pushButton_2.setGeometry(QtCore.QRect(430, 260, 75, 23))self.pushButton_2.setObjectName("pushButton_2")self.label_4 = QtWidgets.QLabel(self.centralwidget)self.label_4.setGeometry(QtCore.QRect(700, 190, 31, 16))self.label_4.setObjectName("label_4")MainWindow.setCentralWidget(self.centralwidget)self.statusbar = QtWidgets.QStatusBar(MainWindow)self.statusbar.setObjectName("statusbar")MainWindow.setStatusBar(self.statusbar)self.retranslateUi(MainWindow)self.horizontalSlider.sliderMoved['int'].connect(self.label_4.setNum) # type: ignoreself.label_4.windowIconTextChanged['QString'].connect(self.horizontalSlider.setFocus) # type: ignoreself.pushButton.clicked.connect(self.zidongflush) # type: ignoreQtCore.QMetaObject.connectSlotsByName(MainWindow)def zidongflush(self):# 按钮设置不可点击self.pushButton.setText("进行中...")self.pushButton.setEnabled(False)# 假设 label_4 已经设置了数字文本,尝试转换成整数try:numb = int(self.label_4.text())except ValueError:numb = 10  # 如果不能转换,则默认为0for _ in range(numb, -1, -1):  # 从 numb 开始递减至 0self.label_4.setText(str(_))  # 设置新的文本self.label_4.update()  # 触发重绘self.horizontalSlider.setValue(_)# 等待一段时间,模拟计时QtCore.QThread.msleep(1000)QApplication.processEvents()  # 让事件循环有机会处理其他事件,防止界面卡死self.pushButton.setText("开始计时")self.pushButton.setEnabled(True)def retranslateUi(self, MainWindow):_translate = QtCore.QCoreApplication.translateMainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))self.label.setText(_translate("MainWindow", "欢迎使用"))self.label_2.setText(_translate("MainWindow", "计时器工具"))self.pushButton.setText(_translate("MainWindow", "开始计时"))self.pushButton_2.setText(_translate("MainWindow", "重置计时"))self.label_4.setText(_translate("MainWindow", "0"))

main.py


import sysfrom PyQt5.QtWidgets import QApplication, QMainWindowfrom UI.test import Ui_MainWindowif __name__ == '__main__':# 创建QApplication实例,传入系统命令行参数app = QApplication(sys.argv)# 创建主窗口,一个应用程序通常只有一个主窗口MainWindow = QMainWindow()# 加载主窗口的用户界面,Ui_MainWindow是自动生成的类,用于控制界面布局和元素ui = Ui_MainWindow()# 使用ui类中的方法设置主窗口的界面,完成界面初始化ui.setupUi(MainWindow)# 设置主窗口的标题MainWindow.setWindowTitle('HG')# 显示主窗口,使得用户可以与之交互MainWindow.show()# 运行应用程序,直到应用程序结束。这里退出应用程序的条件通常是用户关闭了主窗口sys.exit(app.exec_())

四. 打包- pyinstaller

说明: 桌面软件开发完毕之后, 需要打包成.exe文件, 这样才能分发给其他人使用

在这里插入图片描述

下载好之后, 把pyinstaller配置到电脑的PATH中, 这样就可以使用cmd执行了

在这里插入图片描述

打包后的样子

exe可以直接运行

完毕!!! 希望可以让刚开始学的小伙伴增加点思路~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/779046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【保姆级教程】YOLOv8自动数据标注

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple1.3 安装labelme标注工具 pip install labelme二、半自动标注…

buy me a btc 使用数字货币进行打赏赞助

最近在调研使用加密货币打赏的平台&#xff0c;发现idatariver平台 https://idatariver.com 推出的buymeabtc功能刚好符合使用场景&#xff0c;下图为平台的演示项目, 演示项目入口 https://buymeabtc.com/idatariver 特点 不少人都听说过buymeacoffee&#xff0c;可以在上面发…

upload-labs-master靶场训练笔记

2004.2.17 level-1 &#xff08;前端验证&#xff09; 新建一个写有下面一句话木马的php文件&#xff0c;然后把后缀改为png <?php eval($_POST["abc"]); ?> 用bp抓包后更改文件后缀为php 再用蚁剑等工具链接即可拿下shell level-2 &#xff08;后端…

中医面诊笔记

目录 面部五脏分区面部六腑分区眼袋大&#xff0c;黑的原因 面部色诊颧骨发红阴虚火旺为什么面部其它地方不发红而是颧骨发红&#xff1f; 人中 面部五脏分区 面部六腑分区 眼袋大&#xff0c;黑的原因 水湿重&#xff0c;比如眼袋大&#xff0c;眼袋黑&#xff0c;这是水湿过…

postgresql多选功能实现

一、背景介绍 在一所乡村小学&#xff0c;教师资源紧张&#xff0c;所以会出现一个教师身兼多职的情况&#xff0c;既是语文老师又是数学老师甚至还是体育老师&#xff0c;这个系统就是为各个班级分配老师&#xff0c;这样一个场景实现 二、代码实现及效果 后端country_teac…

深圳区块链交易所app系统开发,撮合交易系统开发

随着区块链技术的迅速发展和数字资产市场的蓬勃发展&#xff0c;区块链交易所成为了数字资产交易的核心场所之一。在这个快速发展的领域中&#xff0c;区块链交易所App系统的开发和撮合交易系统的建设至关重要。本文将探讨区块链交易所App系统开发及撮合交易系统的重要性&#…

JAR 文件规范详解

介绍 JAR文件是基于ZIP文件格式的一种文件格式&#xff0c;用来将许多文件整合成一个文件。一个JAR文件本质上是包含可选目录META-INF的zip文件&#xff0c;可以通过命令行jar工具或者在Java平台上使用java.util.jar中的API来创建。JAR文件的命名没有严格的要求&#xff0c;可…

免费采集伪原创工具,采集伪原创软件

在内容创作领域&#xff0c;为了提高生产效率和节省时间&#xff0c;许多站长和网络写手会借助采集伪原创工具来生成大量文章。这些工具能够从网络上抓取内容&#xff0c;并通过一定的处理和修改&#xff0c;生成看起来与原始内容不同但意义相近的伪原创文章。以下将就采集伪原…

leetcode:392. 判断子序列

题目&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {} }; 题解&#xff1a; 很巧妙的题解&#xff1a;循环遍历两个字符串&#xff0c;两个字符串都没遍完就继续遍历&#xff0c;字符串s先遍历完结果为true&#xff0c;字符串t先遍历完结果为…

Elasticsearch 向量搜索

目标记录 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻","你好&#xff0c;我的病人","世界真美丽"] 搜索词 爱人 预期返回 ["你好&#xff0c;我的爱人","你好&#xff0c;我的爱妻"] 示例代码…

故障排查指南:通过连接电脑查找iOS应用崩溃日志的有效技巧

在iOS应用开发过程中&#xff0c;调试日志和奔溃日志是开发者必不可少的工具。当iOS手机崩溃时&#xff0c;我们可以连接电脑并使用Xcode Console等工具来查看日志。然而&#xff0c;这种方式可能不够方便&#xff0c;并且处理奔溃日志也相当繁琐。克魔助手的出现为开发者带来了…

基于springboot实现图书个性化推荐系统项目【项目源码+论文说明】

基于springboot实现图书个性化推荐系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个图书个性化推荐系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…

Nodejs 16与 gitbook搭建属于你自己的书本网站-第一篇

最近想重新搭建一个网站来存放自己的相关知识点&#xff0c;并向网络公开&#xff0c;有个hexo博客其实也不错的&#xff0c;但是总感觉hexo很多花里胡哨的玩意&#xff0c;导致挂载的博客异常卡&#xff0c;这样反而不利于我自己回顾博客了&#xff0c;于是我就开始钻研这个鬼…

computed计算属性、watch侦听器、生命周期

计算属性 点击查看 Vue文档 基础语法 多次使用计算属性&#xff0c;计算属性方法也只执行一次&#xff0c; 调用计算属性的方法不能加() 直接修改计算数学的值 计算属性不能通过双向绑定修改&#xff08;默认不能改&#xff09; 想要修改计算属性&#xff0c;就必须使用计…

LeetCode 206.反转链表

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1a; …

webpack项目打包console git分支、打包时间等信息 exec

相关链接 MDN toLocaleString child_process Node.js strftime 格式 代码 buildinfo.js const { execSync, exec } require("child_process"); // exec: 在 Windows 执行 bat 和 cmd 脚本// execSync 同步 // exec 异步// exec 使用方法 // exec(git show -s,…

SMBV100A罗德与施瓦茨SMBV100A信号源

181/2461/8938产品概述&#xff1a; 罗德与施瓦茨 SMBV100A 提供卓越的射频性能以及非常高的输出电平和较短的设置时间。同时&#xff0c;SMBV100A可配备内部基带发生器&#xff0c;以生成多种数字标准&#xff08;例如LTE、LTE-Advanced、IEEE802.11ac、GNSS&#xff09;。9 …

【C++杂货铺】内管管理

目录 &#x1f308;前言&#x1f308; &#x1f4c1; C/C中内存分布 &#x1f4c1; new 和 delete的使用 &#x1f4c1; new 和 delete的优点 &#x1f4c1; new 和 delete的原理 &#x1f4c2; operator new 和 operator delete函数 &#x1f4c2; 内置类型 &#x1f4c2…

Java中读取html文件转成String,展示在浏览器

这里写目录标题 第一章1.1&#xff09;pom中引入依赖和html文件示例1.2&#xff09;使用hutool工具包读取html文件转为string1.3&#xff09;页面显示 第一章 1.1&#xff09;pom中引入依赖和html文件示例 引入hutool工具包依赖 <dependency><groupId>cn.hutool&…

【C++程序员的自我修炼】基础语法篇(一)

心中若有桃花源 何处不是水云间 目录 命名空间 &#x1f49e;命名空间的定义 &#x1f49e; 命名空间的使用 输入输出流 缺省参数 函数的引用 引用的定义&#x1f49e; 引用的表示&#x1f49e; 引用的特性&#x1f49e; 常量引用&#x1f49e; 引用的使用场景 做参数 做返回值…