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

Python GUI入门详解-学习篇

一、简介

GUI就是图形用户界面的意思,在Python中使用PyQt可以快速搭建自己的应用,自己的程序看上去就会更加高大上。
有时候使用 python 做自动化运维操作,开发一个简单的应用程序非常方便。程序写好,每次都要通过命令行运行 python 程序,就不是那么人性化了。为了更方便的操作,使用 Python GUI 编写界面程序,方便后续程序的操作。

二、安装PyQt5和配置可视化界面

打开PyCharm的Terminal控制台,输入以下命令安装

 pip install pyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple

由于我本地已经安装过了,提示已经存在
在这里插入图片描述
接着再安装QtDesigner,执行以下命令安装

 pip install pyQt5-tools -i  https://pypi.tuna.tsinghua.edu.cn/simple --user

安装截图:
在这里插入图片描述
然后打开设置,按照以下顺序操作:
在这里插入图片描述
这样就配好了
在这里插入图片描述
然后在你的文件上右键,在扩展工具中选择Qt designer即可打开:
在这里插入图片描述
然后就自动打开以下界面:
在这里插入图片描述
接下来,按照同样的方法添加pyuic,pyuic用于将qtdesigner生成的.ui文件转换成python可以识别的.py文件,其设置过程如下图所示,Programs处输入python.exe所在的路径和文件名,Arguments处输入:

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

在Working directory处输入:

$FileDir$

这样生成的py文件就会和被转换的ui文件位于相同的文件夹下,点击ok完成设置
在这里插入图片描述
然后测试配置是否生效,右键文件打开designer工具,新建一个窗口:
在这里插入图片描述
然后CTRL+S 保存文件到你的项目下,重命名名字为:QtTest.ui
在这里插入图片描述
接着右键ui文件在扩展工具里点pyuic给它转成py文件
在这里插入图片描述
在这里插入图片描述

然后在main.py中输入以下代码即可打开可视化窗口

#读取QtTest文件,可视化显示出来
from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication,QMainWindowclass CamShow(QMainWindow,Ui_MainWindow):def __init__(self,parent=None):super(CamShow,self).__init__(parent)self.setupUi(self)if __name__ == '__main__':app = QApplication(sys.argv)ui = CamShow()ui.show()sys.exit(app.exec_())

运行结果如下:
在这里插入图片描述
至此搭建完毕

三、图片展示功能

实战需求:做一个图片浏览器的小demo,在窗口中添加一个打开文件按钮,点击打开文件选择一张图片,图片即可展示到浏览器窗口中。

首先打开qt designer,把项目中的ui文件导入进去打开
在这里插入图片描述
先拖拽一个按钮出来:
在这里插入图片描述
图片想要显示出来,离不开label,如下所示
在这里插入图片描述
因为上面的各组件没有边界,不能一起操作,我们先创建一个group Box,再在box中创建其他组件
在这里插入图片描述
如下图所示:
在这里插入图片描述
我们先修改一下按钮的变量名
在这里插入图片描述
在这里插入图片描述
我们保存一下文件,回到项目中,右键ui文件执行一下扩展工具里的pyuic,然后再执行一下main方法,即可看到修改后的界面:
在这里插入图片描述
接下来给打开文件添加逻辑:

#读取QtTest文件,可视化显示出来
from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog #QFileDialog文件打开所需
from PyQt5 import QtGuiclass CamShow(QMainWindow,Ui_MainWindow):def __init__(self,parent=None):super(CamShow,self).__init__(parent)self.setupUi(self)#信号的绑定 信号与槽 一个信号与槽函数进行连接self.openFileBtm.clicked.connect(self.loadImage)def loadImage(self):print("按钮被按下了")#文件访问功能 获取图片self.fname, _ = QFileDialog.getOpenFileName(self,'选择图片','.','图像文件(*.jpg *.png)')print(self.fname)#把图片显示在图片窗口中 QPixmap 把图片路径转为QPixmap路径 scaled压缩图片到实际大小pix = QtGui.QPixmap(self.fname).scaled(self.ImageLabel.width(),self.ImageLabel.height())self.ImageLabel.setPixmap(pix) #图片窗口展示图片if __name__ == '__main__':app = QApplication(sys.argv)ui = CamShow()ui.show()sys.exit(app.exec_())

运行结果:
在这里插入图片描述

以下再补充一些细节:

#读取QtTest文件,可视化显示出来
from QtTest import Ui_mainWindow
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog,QMessageBox  #QFileDialog文件打开所需
from PyQt5 import QtGuiclass CamShow(QMainWindow,Ui_mainWindow):#所有按钮事件的绑定都是在__init__中绑定的def __init__(self,parent=None):super(CamShow,self).__init__(parent)self.setupUi(self)#信号的绑定 信号与槽 一个信号与槽函数进行连接self.openFileBtm.clicked.connect(self.loadImage)#菜单中的按钮都用的triggeredself.actionOpen.triggered.connect(self.loadImage)#退出按钮self.actionexit.triggered.connect(self.exit)#关于按钮self.actionabout.triggered.connect(self.about)def loadImage(self):self.infolabel.setText("打开文件按钮被按下了")#文件访问功能 获取图片self.fname, _ = QFileDialog.getOpenFileName(self,'选择图片','.','图像文件(*.jpg *.png)')print(self.fname)#把图片显示在图片窗口中 QPixmap 把图片路径转为QPixmap路径 scaled压缩图片到实际大小pix = QtGui.QPixmap(self.fname).scaled(self.ImageLabel.width(),self.ImageLabel.height())self.ImageLabel.setPixmap(pix) #图片窗口展示图片def exit(self):sys.exit(app.exec_())def about(self):self.infolabel.setText("帮助按钮被按下了")#弹出对话框,显示个人信息  QMessageBox 信息对话框QMessageBox.information(self,"软件说明","该软件由欧某某制作而成!软件版本1.0")if __name__ == '__main__':app = QApplication(sys.argv)ui = CamShow()ui.show()sys.exit(app.exec_())

在这里插入图片描述

相关文章:

Python GUI入门详解-学习篇

一、简介 GUI就是图形用户界面的意思,在Python中使用PyQt可以快速搭建自己的应用,自己的程序看上去就会更加高大上。 有时候使用 python 做自动化运维操作,开发一个简单的应用程序非常方便。程序写好,每次都要通过命令行运行 pyt…...

QT5实现https的post请求(QNetworkAccessManager、QNetworkRequest和QNetworkReply)

QT5实现https的post请求 前言一、一定要有sslErrors处理1、问题经过2、代码示例 二、要利用抓包工具1、问题经过2、wireshark的使用3、利用wireshark查看服务器地址4、利用wireshark查看自己构建的请求报文 三、返回数据只能读一次1、问题描述2、部分代码 总结 前言 QNetworkA…...

vscode 使用git bash,路径分隔符缺少问题

window使用bash --login -i 使用bash时候,在系统自带的terminal里面进入,测试conda可以正常输出,但是在vscode里面输入conda发现有问题 bash: C:\Users\marswennaconda3\Scripts: No such file or directory实际路径应该要为 C:\Users\mars…...

F12抓包10:UI自动化 - Elements(元素)定位页面元素

​课程大纲 1、前端基础 1.1 元素 元素是构成HTML文档的基本组成部分之一,定义了文档的结构和内容,比如段落、标题、链接等。 元素大致分为3种:基本结构、自闭合元素(self-closing element)、嵌套元素。 1、基本结构&…...

android 删除系统原有的debug.keystore,系统运行的时候,重新生成新的debug.keystore,来完成App的运行。

1、先上一个图:这个是keystore无效的原因 之前在安装这个旧版本android studio的时候呢,安装过一版最新的android studio,然后通过模拟器跑过测试的demo。 2、运行旧的项目到模拟器的时候,就报错了: Execution failed…...

SQL入门题

作者SQL入门小白,此栏仅是记录一些解题过程 1、题目 用户访问表users,记录了用户id(usr_id)和访问日期(log_date),求出连续3天以上访问的用户id。 2、解答过程 2.1数据准备 通过navicat创建数据&#xf…...

Python实战:实战练习案例汇总

Python实战:实战练习案例汇总 **Python世界系列****Python实践系列****Python语音处理系列** 本文逆序更新,汇总实践练习案例。 Python世界系列 Python世界:力扣题43大数相乘算法实践Python世界:求解满足某完全平方关系的整数实…...

zabbix之钉钉告警

钉钉告警设置 我们可以将同一个运維组的人员加入到同一个钉钉工作群中,当有异常出现后,Zabbix 将告警信息发送到钉钉的群里面,此时,群内所有的运维人员都能在第一时间看到这则告警详细。 Zabbix 监控系统默认没有开箱即用…...

《OpenCV计算机视觉》—— 对图片进行旋转的两种方法

文章目录 一、用numpy库中的方法对图片进行旋转二、用OpenCV库中的方法对图片进行旋转 一、用numpy库中的方法对图片进行旋转 numpy库中的 np.rot90 函数方法可以对图片进行旋转 代码实现如下: import cv2 import numpy as np# 读取图片 img cv2.imread(wechat.jp…...

Python 错误 ValueError 解析,实际错误实例详解 (一)

文章目录 前言Python 中错误 ValueError: No JSON object Could Be Decoded在 Python 中解码 JSON 对象将 JSON 字符串解码为 Python 对象将 Python 对象编码为 JSON 字符串Python 中错误 ValueError: Unsupported Pickle Protocol: 3Python 中的 Pickling 和 UnpicklingPython…...

[java][git]上传本地代码及更新代码到GitHub教程

上传本地代码及更新代码到GitHub教程 上传本地代码 第一步:去github上创建自己的Repository,创建页面如下图所示: 红框为新建的仓库的https地址 第二步: echo "# Test" >> README.md 第三步:建立g…...

react antd table expandable defaultExpandAllRows 不生效问题

原因&#xff1a;defaultExpandAllRows只会在第一次渲染时触发 解决方案&#xff1a;渲染前判断table 的datasource 数据是否已准备好 {pageList.length > 0 ? (<TablerowSelection{rowSelection}columns{columns}dataSource{pageList}style{{ marginTop: 24 }}pagina…...

什么是领域驱动设计?

什么是领域驱动设计&#xff1f; 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;简称DDD&#xff09;是一种面向对象的软件开发方法&#xff0c;它强调将软件系统的设计和实现过程与业务领域紧密结合&#xff0c;通过深入理解和建模业务领域&#xff0c;从而实现高…...

信息安全工程师(1)计算机网络分类

一、按分布范围分类 广域网&#xff08;WAN&#xff09;&#xff1a; 定义&#xff1a;广域网的任务是提供长距离通信&#xff0c;运送主机所发送的数据。其覆盖范围通常是直径为几十千米到几千千米的区域&#xff0c;因此也被称为远程网。特点&#xff1a;连接广域网的各个结点…...

利士策分享,探索无界:心灵之旅,发现未知精彩

利士策分享&#xff0c;探索无界&#xff1a;心灵之旅&#xff0c;发现未知精彩 梦想的种子&#xff0c;在心田生根发芽 正如每一颗种子都蕴含着生命的奥秘&#xff0c;每个人心中那颗探索的种子&#xff0c;也藏着对未知世界的渴望与追求。它告诉我们&#xff0c;成长不仅仅…...

Jetson 部署 Faster Whisper

文章目录 WhisperFaster Whisper安装使用尝试WSL部署尝试 Jetson 部署时间戳 实时转录 Whisper Whisper 是一种通用语音识别模型。它是在大量不同音频数据集上进行训练的&#xff0c;也是一个多任务模型&#xff0c;可以执行多语言语音识别、语音翻译和语言识别。 测试&#x…...

测试开发基础——测试分类

四、测试分类 1. 按照测试目标分类 1.1. 界面测试 肉眼看到的任何元素都需要进行测试 界面测试&#xff08;简称U测试&#xff09;&#xff0c;指按照界面的需求&#xff08;一般是U设计稿&#xff09;和界面的设计规则&#xff0c;对我们软件界面所展示的全部内容进行测试…...

【计网】数据链路层:概述之位置|地位|链路|数据链路|帧

✨ Blog’s 主页: 白乐天_ξ( ✿&#xff1e;◡❛) &#x1f308; 个人Motto&#xff1a;他强任他强&#xff0c;清风拂山岗&#xff01; &#x1f4ab; 欢迎来到我的学习笔记&#xff01; ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ 1. 在OSI体系结构中的位置 1. 位置&#xff1a;数…...

【Android】NestedScrollView的简单用法与滚动冲突、滑动冲突

一、NestedScrollView 1. 什么是 NestedScrollView NestedScrollView 是 Android 中一个用于处理垂直方向滚动的布局组件&#xff0c;它继承自 FrameLayout&#xff0c;同时支持嵌套滑动&#xff08;Nested Scrolling&#xff09;机制。相比于传统的 ScrollView&#xff0c;N…...

【LeetCode】每日一题 2024_9_13 预算内的最多机器人数目(滑动窗口、单调队列)

LeetCode 启动&#xff01; 每日一题的题解重新开始连载&#xff01; 题目&#xff1a;预算内的最多机器人数目 题目链接&#xff1a;2398. 预算内的最多机器人数目 题目描述 代码与解题思路 func maximumRobots(chargeTimes []int, runningCosts []int, budget int64) (an…...

当你的Android手机频繁闪退时,系统在后台悄悄做了什么?—— 深入Rescue Party机制

当你的Android手机频繁闪退时&#xff0c;系统在后台悄悄做了什么&#xff1f;—— 深入Rescue Party机制 每次点击应用图标却遭遇闪退时&#xff0c;用户看到的只是瞬间消失的界面&#xff0c;而Android系统内部正上演着一场精密的多线程救援行动。这种看似简单的崩溃背后&…...

ElevenLabs泰米尔语音部署踩坑实录:DNS解析超时、UTF-8 BOM导致静音、方言ID混淆——97%开发者忽略的3个关键参数

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs泰米尔语音部署踩坑实录&#xff1a;DNS解析超时、UTF-8 BOM导致静音、方言ID混淆——97%开发者忽略的3个关键参数 DNS解析超时&#xff1a;被忽略的区域路由策略 ElevenLabs 的 API 在印度…...

facebook-wda异常处理终极指南:如何优雅应对WDAError和元素不存在问题

facebook-wda异常处理终极指南&#xff1a;如何优雅应对WDAError和元素不存在问题 【免费下载链接】facebook-wda Facebook WebDriverAgent Python Client Library (not official) 项目地址: https://gitcode.com/gh_mirrors/fa/facebook-wda 在iOS自动化测试中&#xf…...

用STM32CubeMX和HAL库,5分钟搞定Nooploop TOFSense激光测距模块的串口通信

基于STM32CubeMX与HAL库的TOFSense激光测距快速开发指南 激光测距技术在工业自动化、机器人导航等领域应用广泛&#xff0c;而Nooploop的TOFSense模块凭借其高精度和小型化特点&#xff0c;成为许多嵌入式开发者的首选。本文将手把手带你使用STM32CubeMX和HAL库&#xff0c;在5…...

088、机器人动力学:牛顿-欧拉法

机器人动力学:牛顿-欧拉法 从一次机械臂抖动说起 去年调试一台六轴协作机器人,空载运行还算平稳,一夹持3kg负载做高速圆弧插补,末端就开始高频抖动。PID参数调了三轮,陷波滤波器加了两个,效果都不理想。后来拆开关节看,发现电机电流波形在加减速阶段有明显的毛刺——这…...

Linux多网卡主机路由检查方法

Linux多网卡主机路由检查方法多网卡主机在 Linux 环境中并不少见。它们可能用于业务隔离、管理面分离、双线接入、内外网分流或高可用部署。但多网卡也意味着更复杂的路由行为。很多“这台机器能 ping 通但服务异常”“流量出去后回不来”的问题&#xff0c;最终都与路由选择有…...

【YOLO目标检测全栈实战】33 模型部署的终极形态:ONNX Runtime + TensorRT EP 跨平台推理

还记得上周帮一家做边缘计算盒子的客户调优时,他们遇到一个典型问题:同一份ONNX模型,在Windows服务器上用TensorRT跑出了5ms的推理延迟,可部署到客户的ARM工控机上,却只能用CPU硬扛,延迟直接飙到80ms。 客户老板当场拍桌子:“你们这模型是不是分三六九等?”我拆开部署…...

亲身体验AI智能体在实际项目中展现的核心能力

AI 智能体能力实战学习笔记 通过与 AI 智能体的协作&#xff0c;我亲身体验了 AI 在软件开发全流程中的强大能力。本文记录了智能体在实际项目中展现的核心功能&#xff0c;以及如何使用这些能力提高工作效率。 &#x1f3af; 核心能力概览 能力地图 AI 智能体能力 ├── &a…...

Taotoken用量看板如何帮助团队精细化管控大模型成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken用量看板如何帮助团队精细化管控大模型成本 对于团队技术负责人或项目管理者而言&#xff0c;大模型API的调用成本正成为一…...

【鸿蒙 HarmonyOS】从零到一:Node.js 环境配置与 DevEco Studio 无缝对接指南

1. 为什么需要Node.js环境&#xff1f; 如果你刚刚接触鸿蒙开发&#xff0c;可能对DevEco Studio里弹出的"Node.js not found"提示感到困惑。其实Node.js在鸿蒙生态中扮演着重要角色——它不仅是npm包管理器的运行环境&#xff0c;更是鸿蒙应用编译工具链的基础依赖。…...