如何右键单击保存图片或文件?

2024-04-28 10:49:03 发布

您现在位置: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) 

除了复制的想法,还有更好的方法吗


Tags: 文件代码fromimportselfdefsys图片
1条回答
网友
1楼 · 发布于 2024-04-28 10:49:03

请勿复制图像,因为没有人保证加载图像后原始图像位于同一位置或仍然存在。相反,从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)

相关问题 更多 >