python - 如何右键保存图片或文件?
问题描述
我写了一个 pyqt5 代码来显示来自我们本地计算机的图片或文件。在此之后,我不知道将窗口中显示的图片或文件保存在其他路径上。我想出的唯一方法是复制它们。任何建议或提示将不胜感激。
这是显示图片或文件的代码:
import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
class fileDialogdemo(QWidget):
def __init__(self,parent=None):
super(fileDialogdemo, self).__init__(parent)
layout=QVBoxLayout()
self.btn=QPushButton("Load Picture")
self.btn.clicked.connect(self.getimage)
layout.addWidget(self.btn)
self.le=QLabel('')
layout.addWidget(self.le)
self.btn1=QPushButton('Load text file')
self.btn1.clicked.connect(self.getFiles)
layout.addWidget(self.btn1)
self.contents=QTextEdit()
layout.addWidget(self.contents)
self.setLayout(layout)
self.setWindowTitle('File Dialog ')
def getimage(self):
image_file,_=QFileDialog.getOpenFileName(self,'Open file','C:\\','Image files (*.jpg *.gif *.png *.jpeg)')
self.le.setPixmap(QPixmap(image_file))
def getFiles(self):
dig=QFileDialog()
dig.setFileMode(QFileDialog.AnyFile)
dig.setFilter(QDir.Files)
if dig.exec_():
filenames=dig.selectedFiles()
f=open(filenames[0],'r')
with f:
data=f.read()
self.contents.setText(data)
if __name__ == '__main__':
app=QApplication(sys.argv)
ex=fileDialogdemo()
ex.show()
sys.exit(app.exec_())
这是我正在尝试保存的代码,但是有问题:
def contextMenuEvent(self, event):
cmenu = QMenu(self)
saveAct = cmenu.addAction("Save as")
action = cmenu.exec_(self.mapToGlobal(event.pos()))
if action == saveAct:
filename = QFileDialog.getSaveFileName(self)
shutil.copyfile(self.image_file, filename)
除了复制的想法,还有什么更好的方法吗?
解决方案
不要复制图像,因为没有人保证加载图像后原始图像在同一位置或仍然存在。相反,从 QLabel 检索 QPixmap 并保存它:
def contextMenuEvent(self, event):
cmenu = QMenu(self)
saveAct = cmenu.addAction("Save as")
action = cmenu.exec_(self.mapToGlobal(event.pos()))
if action == saveAct:
filename, _ = QFileDialog.getSaveFileName(self)
pixmap = self.le.pixmap()
if pixmap is not None and filename:
pixmap.save(filename)
推荐阅读
- java - @Inject Java 中 2 个依赖类的 2 个构造函数的注解
- python - 在我的 RNN 模型中,每个时期的验证损失都在增加,验证准确度在降低
- microsoft-graph-api - Microsoft Graph api 不返回为 Onenote 个人帐户添加的新页面
- python - 有没有办法在 Python 中的每个 ']' 之后添加一个新行?
- linux - Postgresql 无法在 linux 上启动
- can-bus - cansend 命令不会将帧从 can0 发送到 can1
- c++ - Expected time complexity of O(n^2), but it results in O(n). Can some explain why?
- cypress - 未给出值属性时如何在赛普拉斯中查找文本?
- perforce - 从 Perforce 的流库中仅获取一个文件夹
- c# - 使用 StartsWith() 时如何提高查找性能