Python GUI入门详解-学习篇

2024-09-07 11:28
文章标签 python 学习 入门 详解 gui

本文主要是介绍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入门详解-学习篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1144923

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]