【问题标题】:Copy multiple images to clipboard将多个图像复制到剪贴板
【发布时间】:2021-07-27 08:54:58
【问题描述】:

我在一个文件夹中有多个 JPG 文件。我想一次性将它们全部复制到剪贴板,所以当我按下 ctrl+v 时,我可以粘贴它们。

Shutil 会将文件从 dict 复制并粘贴到 dict:

from PyQt6 import QtCore, QtGui

for _ in range(10):
    app = QtGui.QGuiApplication([])
    data = QtCore.QMimeData()
    url = QtCore.QUrl.fromLocalFile(full_file_name)
    data.setUrls([url])
    app.clipboard().setMimeData(data)

此代码只会将一张随机图像从我设置的路径复制到剪贴板。如果我遍历所有文件,它就会崩溃。

【问题讨论】:

  • “崩溃”是什么意思?它是否抛出错误并停止?还是它什么也没做?还是它停止了程序?
  • 当我使用 if type(data) 时,它会复制第一个图像而不是说不能是非类型!= 无:它会突然关闭所有代码并出现错误 0xc0000005
  • 所说的不能是 NoneType。您可以将整个回溯粘贴到您的问题中吗?
  • 我上传了代码和错误的图像
  • 我的操作系统:windows

标签: python python-3.x pyqt pyqt6


【解决方案1】:

OP 的问题(如图所示)是他正在创建多个 QGuiApplications 并且由于它是单例而无法完成。

解决方法是在for循环之前创建一个QGuiAplication,然后通过静态方法QGuiApplication.clipboard()访问:

import os

from PyQt6 import QtCore, QtGui

path = os.getcwd()

urls = []

it = QtCore.QDirIterator(path, ("*.jpg",), QtCore.QDir.Filters.Files)

while it.hasNext():
    url = QtCore.QUrl.fromLocalFile(it.next())
    urls.append(url)

if QtGui.QGuiApplication.instance() is None:
    app = QtGui.QGuiApplication([])

data = QtCore.QMimeData()
data.setUrls(urls)
QtGui.QGuiApplication.clipboard().setMimeData(data)

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2011-04-19
    • 2013-07-14
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多