当前位置: 首页 > news >正文

Python 开发图形界面程序

用 Python 语言开发图形界面的程序,有2种选择:

  • Tkinter

    基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。

  • PySide2/PySide6

    基于Qt 的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多。

    缺点是 库比较大,发布出来的程序比较大。

如果是开发小工具,界面比较简单,可以采用Tkinter。
如果是发布功能比较多的正式产品,采用基于Qt的 PySide2/PySide6 。

本文介绍的是使用 PySide2 开发Python程序的图形界面。

安装 PySide2

pip install pyside2

也可以指定国内的安装源,下载速度更快。

pip install pyside2 -i https://pypi.douban.com/simple/

Python 3.11 不能安装 PySide2,可以安装PySide6;
如果要安装 PySide2,只能使用 Python 3.10 或者更早的 Python版本。

PySide2官方文档 https://doc.qt.io/archives/qtforpython-5.12/PySide2/QtWidgets/index.html#module-PySide2.QtWidgets

一、PySide2安装完成后,在python安装目录下Scripts文件夹,运行pyside2-designer.exe进入图形设计。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存图形界面生成 login.ui 文件(前缀可以自定义)

二、把 .ui 文件转换成 .py 文件供python程序调用

执行命令: pyside2-uic login.ui > login_ui.py
把UI文件转化为包含界面定义的Python代码文件,具体步骤如下:

  1. 把login.ui文件复制到python目录Scripts文件夹,在空白处按着shift + 右击鼠标,选择【在此处打开命令窗口】。
    在这里插入图片描述

在这里插入图片描述

  1. 运行命令后没有报错,说明正确生成了py文件。
    在这里插入图片描述
  2. 把login_ui.py文件复制到python项目以方便调用。
    在这里插入图片描述

三、调用login_ui.py 以及编写逻辑代码

import sys
from PySide2.QtWidgets import QApplication, QMainWindow
# 导入login_ui.py 文件 Ui_MainWindow 类
from login_ui import Ui_MainWindow# 注意 这里选择的父类 要和你UI文件窗体一样的类型
# 主窗口是 QMainWindow, 表单是 QWidget, 对话框是 QDialog
class MainWindow(QMainWindow):def __init__(self):super().__init__()# 使用ui文件导入定义界面类self.ui = Ui_MainWindow()# 初始化界面self.ui.setupUi(self)# 调用自定义方法self.ui.pushButton_login.clicked.connect(self.handleCalc)self.ui.pushButton_exit.clicked.connect(self.eixtSys)def handleCalc(self):# 利用lineEdit控件对象text()函数获取界面输入username = self.ui.lineEdit_user.text()password = self.ui.lineEdit_pwd.text()# 利用textEdit控件对象setText()函数设置界面显示self.ui.textEdit_list.setText("登录成功!\n" + "用户名是: " + username + "\n密码是: " + password)def eixtSys(self):sys.exit()app = QApplication([])
mainw = MainWindow()
# 将窗口控件显示在屏幕上
mainw.show()
# 程序运行,sys.exit方法确保程序完整退出。
sys.exit(app.exec_())

在这里插入图片描述
在这里插入图片描述
运行代码
在这里插入图片描述
在这里插入图片描述

四、使用Pyinstaller转换.py文件为.exe可执行程序

pyinstaller其实就是把python解释器和脚本打包成一个可执行文件,和编译成真正的机器码是完全两回事。所以打包不一定会提高运行效率,可能会降低运行效率,但是好处是在运行者机器上不用安装python和脚本所依赖的库。

输入指定的脚本后,首先pyinstaller会分析该脚本所依赖的其他依赖,然后进行查找、复制,把所有相关的依赖都收集起来并惊醒加密处理,包括python解释器,最后把这些文件放在一个目录下,或者打包到一个可执行文件。然后就可以直接运行所生成的可执行文件。

使用pyinstaller打包生成的可执行文件,只能在和打包机器系统相同的环境下运行。32位python环境打包的程序可以运行在32/64位windows系统上。64位python环境打包的程序只能运行在64位windows系统上。所以如果想打包程序的话,建议使用32位python环境打包。

注意事项
1、待转换的.py文件绝对路径最好不要包含中文字符,不然容易出现一些莫名其妙的问题。
2、python中需要有.py文件中用到的第三方库。否则在转换后的.exe文件中会出现不符合预期的结果。

安装pyinstaller库,打开cmd命令行窗口,输入:pip install pyinstaller

在这里插入图片描述
where pyinstaller 命令查看安装路径
在这里插入图片描述
在项目内打开CMD ,运行命令 pyinstaller -F QT2.py -w
在这里插入图片描述

可执行文件在 dist 目录
在这里插入图片描述

pyinstaller 实例说明

pyinstaller -F myScript.py -w

参数区分大小写

-F 表示生成单个可执行文件,常用。
-w 小写 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-p 小写 表示你自己自定义需要加载的类路径,一般情况下用不到。
-i 表示可执行文件的图标。注意:图片后缀必须是.ico-c,console,-nowindowed:使用控制台,无窗口(默认)
-D 创建一个目录,包含EXE文件,但会依赖很多文件(默认选项)。

使用问题:
1、如果Python脚本使用到了第三方库,如何打包?

 方法一:将第三方库对应的包复制到待打包python脚本的同目录下,再执行打包命令。方法二:pyinstaller -F  路径\文件名.py 路径\文件名.py 

2、我的python脚本主要是命令行输出,但是程序执行完就退出无法查看相关信息,如何处理?

在python脚本最后一行添加命令:
os.system('pause') 或者 raw_input('Press enter any key to exit...')

3、 我想给我的打包后的执行程序换个图标,如何处理?

  使用参数-i :  pyinstaller -F -i tupian\qq.ico myScript.py 图标文件后缀名必须是.ico

4、程序运行出现CMD窗口,如何去除?

  带上参数-w : pyinstaller -F myScript -w 

相关文章:

Python 开发图形界面程序

用 Python 语言开发图形界面的程序,有2种选择: Tkinter 基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。 PySide2/PySide6 基于Qt 的Python库&#x…...

百度搜索引擎SEO优化方法

随着互联网的不断发展,搜索引擎已经成为人们获取信息、产品和服务的主要途径之一。而在中国,百度作为最大的搜索引擎,其影响力不可忽视。了解并掌握百度SEO关键词优化方法,对于提升网站在搜索引擎中的排名至关重要。 关键词选择&a…...

一文了解docker与k8s

随着 k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s 进行对比,不禁问道:Docker 不香吗? k8s 是 kubernetes 的缩写,8 代表中间的八个字符。 其实 Docker 和 k8s 并非直接的竞争对手两者相互依存…...

Linux基础——进程控制

1. 进程创建 在这之前我们曾了解过进程创建(详见进程初识(二)),我们在这里对fork函数做一些补充 其实对于父子进程来说,若是有一方试图修改数据时,会向物理内存中申请一份新空间,并…...

网络工程师笔记8

华为VRP系统 设备管理方式 web管理方式 命令行管理方式 修改命令:undo 基础配置命令...

从零学算法128

128.给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入:nums [100,4,200,1,3,2] 输出:4…...

2024免费mac苹果电脑的清理和维护软件CleanMyMac X

对于 Mac 用户来说,电脑的清理和维护是一件让人头疼的事情。但是,有了 CleanMyMac X,这一切都将变得轻松愉快。CleanMyMac X 是一款专为 Mac 设计的电脑清理软件,它以其强大的功能和简单的操作,让无数用户为之倾倒。 C…...

Python反射机制在实际场景中的应用

Python 的反射机制是指在运行时动态地访问、检测和修改类和对象的属性和方法。反射为开发者提供了一种灵活的方式来处理对象和类,可以在实际场景中提供一些有用的功能和应用,下面是 Python 反射在实际场景中的一些常见应用: 插件系统&#xf…...

网络原理初识

一、IP地址 概念 IP 地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说, IP 地址用于定位主机 的网络地址 。 就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 二、…...

关于uniapp小程序的分包问题

开发uniapp小程序时,在打包上传代码时会出现超出2M的打包限制不能上传,那么我们该怎么做呢? 1.对于图片,将图片从后端服务取,尽量不要放在静态资源,图片体积会影响打包大小。 2.使用分包,tabb…...

MySQL:索引的优化方法

索引是帮助存储引擎快速获取数据的一种数据结构,形象的说就是索引是数据的目录。 索引创建的时机: 索引并不是越多越好的,虽然他再查询时会提高效率,但是保存索引和维护索引也需要一定的空间和时间成本的。 不创建索引&#xff1a…...

前后端分离vue+nodejs+mysql高校学生社团管理系统xgp16

系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对高校社团的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想&a…...

HCIA-Datacom实验指导手册:7 构建简单 IPv6 网络

HCIA-Datacom实验指导手册:7 构建简单 IPv6 网络 一、实验介绍:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 设备基础配置设备命名 步骤 2 配置设备及接口 IPv6 功能步骤 3 配置接口的 link-local 地址&#xff0c…...

ElasticSearch搜索引擎使用指南

一、ES数据基础类型 1、数据类型 字符串 主要包括: text和keyword两种类型,keyword代表精确值不会参与分词,text类型的字符串会参与分词处理 数值 包括: long, integer, short, byte, double, float 布尔值 boolean 时间 date 数组 数组类型不…...

mysql与oracle的区别

一、并发性并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。mysql:mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。虽然InnoDB引擎的表…...

JVM相关面试题及常用命令参数

JVM常用命令和参数 常用命令: jps:查看进程及其相关信息 jmap:用来生成dump文件和查看堆相关的各类信息的命令 jstat:查看jvm运行时的状态信息 jstack:查看jvm线程快照的命令 jinfo:查看jvm参数和动态修改…...

Material UI 5 学习01-按钮组件

Material UI 5 学习01-按钮组件 一、安装Material UI二、 组件1、Button组件1、基础按钮2、variant属性3、禁用按钮4、可跳转的按钮5、disableElevation属性6、按钮的点击事件onClick 2、Button按钮的颜色和尺寸1、Button按钮的颜色2、按钮自定义颜色3、Button按钮的尺寸 3、图…...

解决移除数字问题的两种方法:暴力法和使用栈

题目 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字 示例 1 : 输入:num "1432219", k 3 输出:"1219"…...

高校宣讲会管理系统|基于Springboot的高校宣讲会管理系统设计与实现(源码+数据库+文档)

高校宣讲会管理系统目录 目录 基于Springboot的高校宣讲会管理系统设计与实现 一、前言 二、系统功能设计 1、学生信息管理 2、企业信息管理 3、宣讲会管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …...

6_怎么看原理图之协议类接口之LCD笔记

首先想一想再前几篇文章讲的协议类的前提 1、双方约定好通信的协议 2、双方满足一定的时序要求 以上第二点又有一些要求: 1)弄清2440在这个通信协议中,能设置哪些时序的值,这些值的含义是什么——2440手册 2)弄清楚这…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 ​…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...

前端开发者常用网站

Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...

Java详解LeetCode 热题 100(26):LeetCode 142. 环形链表 II(Linked List Cycle II)详解

文章目录 1. 题目描述1.1 链表节点定义 2. 理解题目2.1 问题可视化2.2 核心挑战 3. 解法一:HashSet 标记访问法3.1 算法思路3.2 Java代码实现3.3 详细执行过程演示3.4 执行结果示例3.5 复杂度分析3.6 优缺点分析 4. 解法二:Floyd 快慢指针法(…...