#python #pyqt
#python #pyqt
Вопрос:
Возможно ли скопировать файл в буфер обмена?
Как если бы было нажато «ctrl c». Так что, когда я нажимаю «ctrl v» в какой-либо папке, он появится здесь.
http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qclipboard.html — не удается найти ничего о файлах.
file = 'C:foo.file'
clipboard = QtGui.QApplication.clipboard()
????
Возможно ли это вообще?
Комментарии:
1. Вы копируете и вставляете внутри своего приложения или вам нужно скопировать файл во внешнее окно папки?
2. Внешняя папка. Как и с текстом.
3. Примечание: должно быть
QtGui.QGuiApplication
. (илиQtWidgets.QApplication
)
Ответ №1:
Данные буфера обмена моделируются с помощью QMimeData
класса, который может содержать список URL-адресов, включая URL-адреса локальной файловой системы.
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)
Комментарии:
1. Помните, что в буфере обмена X11 должен быть запущен цикл событий (
QApplication.exec_
).
Ответ №2:
Создайте QURLS файлов, сохраните их в 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_())