PyQt项目实战1

news2024/12/23 17:16:45

 转载

pyqt5:利用QFileDialog从本地选择图片\文本文档显示到label、保存图片\label文本到本地(附代码)_pyqt5中qfiledialog.getopenfileurl-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/tensixchuan/article/details/1057178331、QtDesigner的控件摆设完成后,可以定义函数设置其功能,再通过关联函数将控件与其对应的函数联系在一起。

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QApplication


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        # pushButton_openImage
        self.pushButton_openImage = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_openImage.setGeometry(QtCore.QRect(60, 40, 75, 23))
        self.pushButton_openImage.setObjectName("pushButton_openImage")

        # pushButton_openImage
        self.pushButton_saveImage = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_saveImage.setGeometry(QtCore.QRect(60, 90, 75, 23))
        self.pushButton_saveImage.setObjectName("pushButton_saveImage")

        # pushButton_openImage
        self.pushButton_openDirectory = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_openDirectory.setGeometry(QtCore.QRect(60, 200, 75, 23))
        self.pushButton_openDirectory.setObjectName("pushButton_openDirectory")

        # pushButton_openFile
        self.pushButton_openFile = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_openFile.setGeometry(QtCore.QRect(60, 280, 75, 23))
        self.pushButton_openFile.setObjectName("pushButton_openFile")

        # pushButton_saveImage
        self.pushButton_saveFile = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_saveFile.setGeometry(QtCore.QRect(60, 340, 75, 23))
        self.pushButton_saveFile.setObjectName("pushButton_saveFile")

        self.label_imagePath = QtWidgets.QLabel(self.centralwidget)
        self.label_imagePath.setGeometry(QtCore.QRect(600, 80, 54, 12))
        self.label_imagePath.setObjectName("label_imagePath")
        self.label_directoryPath = QtWidgets.QLabel(self.centralwidget)
        self.label_directoryPath.setGeometry(QtCore.QRect(170, 210, 54, 12))
        self.label_directoryPath.setObjectName("label_directoryPath")
        self.label_filePath = QtWidgets.QLabel(self.centralwidget)
        self.label_filePath.setGeometry(QtCore.QRect(170, 290, 54, 12))
        self.label_filePath.setObjectName("label_filePath")

        self.label_txt = QtWidgets.QLabel(self.centralwidget)
        self.label_txt.setGeometry(QtCore.QRect(170, 339, 281, 161))
        self.label_txt.setStyleSheet("border: 1px solid black;")
        self.label_txt.setObjectName("label_txt")

        self.label_image = QtWidgets.QLabel(self.centralwidget)
        self.label_image.setGeometry(QtCore.QRect(170, 30, 281, 131))
        self.label_image.setStyleSheet("border: 1px solid black;")
        self.label_image.setObjectName("label_image")
        self.label_image.raise_()
        # self.label_image = QtWidgets.QLabel(self.centralwidget)
        # self.label_image.setGeometry(QtCore.QRect(200, 50, 321, 231))
        # self.label_image.setFrameShape(QtWidgets.QFrame.Box)
        # self.label_image.setObjectName("label_image")
        # self.label_image.setScaledContents(True)  # 图片填充整个框

        self.pushButton_openImage.raise_()
        self.pushButton_saveImage.raise_()
        self.pushButton_openDirectory.raise_()
        self.pushButton_openFile.raise_()
        self.pushButton_saveFile.raise_()
        self.label_imagePath.raise_()
        self.label_directoryPath.raise_()
        self.label_filePath.raise_()
        self.label_txt.raise_()

        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))

        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")

        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        # 关联函数
        self.pushButton_openImage.clicked.connect(self.openImage)
        self.pushButton_saveImage.clicked.connect(self.saveImage)
        self.pushButton_openFile.clicked.connect(self.openTextFile)
        self.pushButton_saveFile.clicked.connect(self.saveTextFile)
        self.pushButton_openDirectory.clicked.connect(self.openDirectory)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_openImage.setText(_translate("MainWindow", "打开图像"))
        self.pushButton_saveImage.setText(_translate("MainWindow", "保存图像"))
        self.pushButton_openDirectory.setText(_translate("MainWindow", "打开文件夹"))
        self.pushButton_openFile.setText(_translate("MainWindow", "打开文件"))
        self.pushButton_saveFile.setText(_translate("MainWindow", "保存文件"))
        self.label_imagePath.setText(_translate("MainWindow", "图片路径"))
        self.label_directoryPath.setText(_translate("MainWindow", "文件夹路径"))
        self.label_filePath.setText(_translate("MainWindow", "文件路径"))
        self.label_txt.setText(_translate("MainWindow", "文本内容"))
        self.label_image.setText(_translate("MainWindow", "图片"))

    '''
    1.打开本地图片
    QFileDialog.getOpenFileName()返回值有两个,第一个是选择文件的文件名(文件路径),我们可以通过这个文件名打开本地文件,第二个是选择文件的类型
    有4个参数,第一个参数一般是self,第2个参数是弹出框的标题,第3个参数是打开对话框的默认地址,第4个参数是过滤字符串,一般用来限制文件类型,定义打开
    文件下拉框中的可选列表,并且不同的文件类型用两个分号;;隔开
    '''

    def openImage(self):  # 选择本地图片上传
        global imgName  # 这里为了方便别的地方引用图片路径,我们把它设置为全局变量
        imgName, imgType = QFileDialog.getOpenFileName(self.centralwidget, "打开图片", "",
                                                       "*.jpg;;*.png;;All Files(*)")  # 弹出一个文件选择框,第一个返回值imgName记录选中的文件路径+文件名,第二个返回值imgType记录文件的类型
        jpg = QtGui.QPixmap(imgName).scaled(self.label_image.width(),
                                            self.label_image.height())  # 通过文件路径获取图片文件,并设置图片长宽为label控件的长宽
        self.label_image.setPixmap(jpg)  # 在label控件上显示选择的图片 点击控件选择文件
        self.label_imagePath.setText(imgName)  # 显示所选图片的本地路径 就是大大的黑色方框

        '''
    2.保存图片到本地
    首先还是打开一个保存文件的弹出框,然后保存图片到刚刚选择的路径,这里保存有两种思路
    第一种是记录要保存图片原来的路径,获取到图片实例,然后把图片写入选择的路径
    第二种是把图片所在label控件屏幕截图,然后保存截图(我觉得这个比较简单)
    '''

    def saveImage(self):  # 保存图片到本地
        screen = QApplication.primaryScreen()
        pix = screen.grabWindow(self.label_image.winId())
        fd, type = QFileDialog.getSaveFileName(self.centralwidget, "保存图片", "", "*.jpg;;*.png;;All Files(*)")
        pix.save(fd)

    '''
    3.打开文件夹
    '''

    def openDirectory(self):  # 打开文件夹(目录)
        fd = QFileDialog.getExistingDirectory(self.centralwidget, "选择文件夹", "")
        self.label_directoryPath.setText(fd)

    '''
    4.打开本地文本文件并显示
    '''

    def openTextFile(self):  # 选择文本文件上传
        fd, fp = QFileDialog.getOpenFileName(self.centralwidget, "选择文件", "", "*.txt;;All Files(*)")
        f = open(fd, 'r')
        self.label_txt.setText(f.read())
        self.label_filePath.setText(fd)
        f.close()

    '''
    5.保存文本到本地
    '''

    def saveTextFile(self):  # 保存文本文件
        fd, fp = QFileDialog.getSaveFileName(self.centralwidget, "保存文件", "", "*.txt;;All Files(*)")
        f = open(fd, 'w')
        f.write(self.label_txt.text())
        f.close()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    formObj = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(formObj)
    formObj.show()
    sys.exit(app.exec_())

2.自己设置好后点击按钮没反应的原因是:

少了这一行代码:

from PyQt5.QtWidgets import QFileDialog, QApplication

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

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

相关文章

告别杂音干扰,享受纯净通话:华为Mate 60 Pro降噪功能体验

作为一名销售,我经常需要使用手机跟客户进行通话。但是,有时候环境嘈杂或者对方的声音不够清晰,让我感到非常烦恼。好在我最近入手了一款华为Mate 60 Pro手机,发现通话功能也有惊喜新升级,它带来的降噪功能让我重新定义…

先后在影酷/传祺E9/昊铂GT量产交付,这家ADAS厂商何以领跑

智能泊车赛道正在迎来黄金增长期,以魔视智能为代表的玩家正在驶入大规模量产的“快车道”。 继在广汽传祺影酷、广汽传祺 E9实现规模化量产交付之后,魔视智能的Magic Parking智能泊车系列解决方案再度在广汽埃安旗下高端智能轿跑——昊铂GT上面实现量产…

基于YOLOv5[n/s/m/l/x]全系列参数模型开发构建小麦麦穗智能化精准检测识别计数系统

在前文中我们已经开发实践了小麦颗粒和小麦麦穗的检测,感兴趣可以自行移步阅读即可: 《基于YOLOv5[n/s/m/l/x]全系列参数模型开发构建小麦麦穗颗粒智能化精准检测识别计数系统》 《基于轻量级yolov5nCBAM开发构建全球小麦麦穗智能检测计数系统》 在上…

LiveGBS流媒体平台GB/T28181功能-报警预案配置告警触发报警时截图及录像摄像头通过GB28181上报报警

LiveGBS报警预案配置告警触发报警时截图及录像摄像头通过GB28181上报报警 1、报警信息1.1、报警查询1.2、配置开启报警订阅1.2.1、国标设备编辑1.2.2、选择开启报警订阅 1.3、配置摄像头报警1.3.1、配置摄像头报警通道ID1.3.2、配置摄像头开启侦测1.3.3、尝试触发摄像头报警1.3…

【TES605】基于Virtex-7 FPGA的高性能实时信号处理平台

板卡概述 TES605是一款基于Virtex-7 FPGA的高性能实时信号处理平台,该平台采用1片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元,采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元,具有2个FMC子卡接口,各个处理节…

某网站cookies携带https_ydclearance获取正文

1、url aHR0cHM6Ly9iYnMuNTFjcmVkaXQuY29tL3RocmVhZC03ODI0OTAzLTEtMS5odG1s2、抓包 根据抓包返回的两个请求进行访问,发现获取正文需cookies携带https_ydclearance cookies {https_ydclearance: 6973fc7d30e4fe01c1bdde9f-ff5e-4d22-bfc2-00e5ab7769b7-16980360…

【tg】8: Manager的主要功能

Manager 提供的是media thread 说明media thread 是主线程, 而 mediamgr里是worker threadnetworkmgr是network thread了。 Manager 的功能重要,但是特别短 G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\Manager.cpp class…

在线零售多用户多门店连锁商城系统

在线零售多用户商城系统和多门店连锁商城系统的核心都是线上线下相结合的,线上和线下结合,一体化是在线新零售多用户商城系统发展的趋势,现在移动互联网时代,越来越多的传统企业,如:连锁店铺,连…

Unity | Image 自定义顶点数据实现圆角矩形

1 圆角方案简介 UGUI 中的 Image 实现圆角效果通常有三种方式,Mask、Shader以及自定义顶点数据,相比于前两者,自定义顶点数据的使用方式更加灵活,同时可以减少 DrawCall,但是会增加顶点及三角形数量。最终实现方案可根…

虚拟世界游戏定制开发:创造独一无二的虚拟体验

在游戏开发领域,虚拟世界游戏定制开发是一项引人注目的任务,旨在满足客户独特的需求和愿景,创造一个完全个性化的虚拟世界游戏。这种类型的游戏开发需要专业的技能、深刻的游戏开发知识和密切的与客户合作,以确保游戏满足客户的期…

【23真题】师范强者,均分135,复试难!

哈喽大家好,现在这个时间节点,有很多同学开始刷真题了!所以23真题系列正式启动!小马哥将全面发布23真题及详细解析! 今天分享的是23年华中师范大学838的信号与系统试题及解析。 本套试难度分析:23年平均分…

JVM 类的加载子系统

文章目录 类的加载过程加载阶段链接阶段初始化 类的加载器测试代码中获取对应的加载器获取加载器加载的路径不同类对应的加载器自定义加载器自定义加载器的方式 获取类的加载器的方式双亲委派机制双亲委派机制的好处 Java 的 SPI 机制1. 接口定义2. 具体实现3. 配置 META-INF/s…

Android Termux安装MySQL,通过内网穿透实现公网远程访问

🔥博客主页: 小羊失眠啦. 🔖系列专栏: C语言、Linux、Cpolar ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前…

探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty

文章目录 Spring框架Spring MVC框架Spring Boot框架MyBatis框架Netty框架总结 🎉欢迎来到Java面试技巧专栏~探索Java中最常用的框架:Spring、Spring MVC、Spring Boot、MyBatis和Netty ☆* o(≧▽≦)o *☆嗨~我是IT陈寒🍹✨博客主页&#xff…

改变了数组内的值,但是页面没有重新渲染

新增的时候可以展示&#xff0c;但是编辑在点新增就没有效果 原因&#xff1a;改变了数组内的值&#xff0c;但是页面没有重新渲染 <el-form-item label"信息:" required><div style"display: flex; align-items: flex-end"><div><e…

Go 代码包与引入:如何有效组织您的项目

一、引言 在软件开发中&#xff0c;代码的组织和管理是成功项目实施的基础之一。特别是在构建大型、可扩展和可维护的应用程序时&#xff0c;这一点尤为重要。Go语言为这一需求提供了一个强大而灵活的工具&#xff1a;代码包&#xff08;Packages&#xff09;。代码包不仅允许…

Java 基础 面试 多线程

1.多线程 1.1 线程&#xff08;Thread&#xff09; 线程时一个程序内部的一条执行流程&#xff0c;java的main方法就是由一条默认的主线程执行 1.2 多线程 多线程是指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09; 许多平台都离不开多…

看微功耗遥测终端机如何轻松应对野外环境挑战?

在野外&#xff0c;数据的实时监测和传输是至关重要的。无论是环境温度、湿度&#xff0c;还是水位、流量&#xff0c;都需要精准把控。然而&#xff0c;传统的监测方法往往受限于电源供应问题&#xff0c;而无法充分发挥其功能。这时候&#xff0c;一款微功耗遥测终端机&#…

前端react入门day01-了解react和JSX基础

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 React介绍 React是什么 React的优势 React的市场情况 开发环境搭建 使用create-react-app快速搭建…

windows系统mysql服务无法启动

### 原因 电脑重启navicat连接mysql失败&#xff0c;在电脑-管理-服务中没有mysql服务 ### 解决方案 1. 找到mysql的安装目录进入bin目录 2. 执行mysqld --install 进行重新安装 提示服务安装成功 3. net start mysql mysql 启动成功