PyQT - 将文件复制到剪贴板

9 投票
2 回答
7788 浏览
提问于 2025-04-16 17:59

可以把文件复制到剪贴板吗?
就像按下了“ctrl+c”一样。这样当我在某个文件夹里按“ctrl+v”时,文件就会出现在这里。

http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qclipboard.html - 这里找不到关于文件的任何信息。

file = 'C:\foo.file'
clipboard = QtGui.QApplication.clipboard()
????

这到底可能吗?

2 个回答

5

创建文件的QUrl,把它们存储在QMimeData中,然后将这个QMimeData粘贴到QClipboard里。(这个方法可以处理多个文件,在KDE 4上测试过,不确定在Windows上是否有效。)

import sys

from PyQt4.QtCore import QMimeData, QUrl
from PyQt4.QtGui import QApplication

app = QApplication(sys.argv)

# Create the urls.
url1 = QUrl('file1')
url2 = QUrl('file2')

# Create the mime data with the urls.
mime_data = QMimeData()
mime_data.setUrls([url1, url2])

# Copy the mime data to the clipboard.
clipboard = QApplication.clipboard()
clipboard.setMimeData(mime_data)

# Run the main loop.
# The X11 clipboard needs the event loop running.
sys.exit(app.exec_())
9

剪贴板的数据是通过 QMimeData 这个类来表示的。这个类可以包含一个网址的列表,其中包括本地文件系统的地址。

from PyQt4 import QtCore, QtGui

app = QtGui.QApplication([])

data = QtCore.QMimeData()
url = QtCore.QUrl.fromLocalFile('c:\\foo.file')
data.setUrls([url])

app.clipboard().setMimeData(data)

撰写回答