如何将字符串复制到剪贴板?
Posted
技术标签:
【中文标题】如何将字符串复制到剪贴板?【英文标题】:How do I copy a string to the clipboard? 【发布时间】:2010-10-09 10:40:12 【问题描述】:我正在尝试制作一个基本的 Windows 应用程序,它根据用户输入构建一个字符串,然后将其添加到剪贴板。如何使用 Python 将字符串复制到剪贴板?
【问题讨论】:
与this question相关。 jaraco.clipboard 也能做到:clipboard.copy(variable) 另请参阅我的answer 以了解有关使用 Tkinter 复制到剪贴板而不显示窗口的相关问题。它包括一个 Python 函数,该函数使用 Tkinter 替换/返回剪贴板文本。 【参考方案1】:实际上,pywin32
和 ctypes
对于这个简单的任务似乎有点过头了。 Tkinter
是一个跨平台的 GUI 框架,默认与 Python 一起提供,并具有剪贴板访问方法以及其他很酷的东西。
如果您只需要将一些文本放入系统剪贴板,就可以了:
from Tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('i can has clipboardz?')
r.update() # now it stays on the clipboard after the window is closed
r.destroy()
仅此而已,无需使用特定于平台的第三方库。
如果您使用的是 Python 3,请将 TKinter
替换为 tkinter
。
【讨论】:
获取剪贴板内容:result = r.selection_get(selection = "CLIPBOARD") @SurDin Tkinter 在 python 3 中被重命名为 tkinter,所以这取决于你使用的版本。 我所有的应用程序在使用此功能粘贴剪贴板的内容后都没有响应,奇怪的是,得到的结果工作正常。 如果我不打电话给r.destroy()
,它会起作用。一旦我调用它,剪贴板就会变空,按 Ctrl-V 可能会导致目标应用程序冻结。 (操作系统:Windows 7 x64)
对我来说这不适用于 python 3.4,但它适用于 python 2.7(是的,使用 tkinter 而不是 Tkinter)【参考方案2】:
我没有解决方案,只是一种解决方法。
Windows Vista 及更高版本有一个名为clip
的内置命令,该命令从命令行获取命令的输出并将其放入剪贴板。例如,ipconfig | clip
。
所以我使用os
模块创建了一个函数,该模块接受一个字符串并使用内置的 Windows 解决方案将其添加到剪贴板。
import os
def addToClipBoard(text):
command = 'echo ' + text.strip() + '| clip'
os.system(command)
# Example
addToClipBoard('penny lane')
# Penny Lane is now in your ears, eyes, and clipboard.
然而,正如之前在 cmets 中所指出的,这种方法的一个缺点是 echo
命令会自动在文本末尾添加换行符。为避免这种情况,您可以使用命令的修改版本:
def addToClipBoard(text):
command = 'echo | set /p nul=' + text.strip() + '| clip'
os.system(command)
如果您使用的是 Windows XP,则只需按照 Copy and paste from Windows XP Pro's command prompt straight to the Clipboard 中的步骤操作即可。
【讨论】:
如果text
包含| calc.exe
会发生什么?
@WilliBallenthin 那么你需要用双引号括起来。但是如果它包含双引号怎么办?然后你需要双引号。 text with " quotes and | pipe
变为 "text with "" quotes and | pipe"
虽然这在 Windows 95 之前的系统上可能会出现问题。
极其不安全的功能...发送到剪贴板的内容现在是一个入口向量,从而增加了您的攻击面。
我还需要对换行符的支持,所以我将其修改为使用type
。我将文本写入文件,并使用命令type myfile.txt | clip
。
虽然这对我来说是最好的答案,但它有一个问题(Python 3.5,Windows 10);总是在字符串末尾添加不需要的换行符。如何避免?【参考方案3】:
您可以使用pyperclip - 跨平台剪贴板模块。或Xerox - 类似的模块,除了需要 win32 Python 模块才能在 Windows 上运行。
【讨论】:
pyperclip
在 Windows 上不执行 Unicode。 win32clipboard
会。
我的pyperclip
补丁被接受了; c:\python34\Scripts\pip install --upgrade pyperclip
处理 Unicode 文本。
我花了一段时间才发现这是pyperclip
,而不是paperclip
。此外,与 2016 年一样,pyperclip 也适用于 Unicode 字符。我已经使用 Python 3.5 和 pyperclip 1.5.27 测试了字符 ±°©©αβγθΔΨΦåäö 在 Win10 64 位上工作。
pyperclip 也适用于 Mac 和 Linux(不仅仅是 Windows),这很好。【参考方案4】:
您还可以使用 ctypes 来利用 Windows API 并避免使用庞大的 pywin32 包。这就是我使用的(请原谅风格不佳,但想法就在那里):
import ctypes
# Get required functions, strcpy..
strcpy = ctypes.cdll.msvcrt.strcpy
ocb = ctypes.windll.user32.OpenClipboard # Basic clipboard functions
ecb = ctypes.windll.user32.EmptyClipboard
gcd = ctypes.windll.user32.GetClipboardData
scd = ctypes.windll.user32.SetClipboardData
ccb = ctypes.windll.user32.CloseClipboard
ga = ctypes.windll.kernel32.GlobalAlloc # Global memory allocation
gl = ctypes.windll.kernel32.GlobalLock # Global memory Locking
gul = ctypes.windll.kernel32.GlobalUnlock
GMEM_DDESHARE = 0x2000
def Get():
ocb(None) # Open Clip, Default task
pcontents = gcd(1) # 1 means CF_TEXT.. too lazy to get the token thingy...
data = ctypes.c_char_p(pcontents).value
#gul(pcontents) ?
ccb()
return data
def Paste(data):
ocb(None) # Open Clip, Default task
ecb()
hCd = ga(GMEM_DDESHARE, len(bytes(data,"ascii")) + 1)
pchData = gl(hCd)
strcpy(ctypes.c_char_p(pchData), bytes(data, "ascii"))
gul(hCd)
scd(1, hCd)
ccb()
【讨论】:
至少在 python 2.6 x64 中,我不得不将bytes(data,"ascii")
更改为bytes(data)
。感谢您回答这个问题,我不能使用 pywin32 或 tk 或其他一些东西,这很有效。
不用担心,但请注意,从剪贴板返回的数据实际上是另一种编码,我相信是Windows CP-1252。这有点被破解了,但如果你不使用正确的编码,那么非 ascii 字符会引发错误或解码不正确。
变量名应该不需要cmets,一切都应该支持Unicode。
bytes(data, "mbcs")
将使用 Windows 默认编码。允许我将其加载到剪贴板 "másreas ç saod é í ó u* ü ö ï/"
并正确读取。
使用mbcs给了我这个:OSError:异常:访问冲突写入0x0000000000000000【参考方案5】:
您可以使用具有内置剪贴板支持的优秀 pandas,但您需要通过 DataFrame。
import pandas as pd
df=pd.DataFrame(['Text to copy'])
df.to_clipboard(index=False,header=False)
【讨论】:
+1。我喜欢这个解决方案。它甚至比公认的 Tkinter 解决方案更简单。如果您还是导入了 pandas,则没有额外的开销。它也适用于所有平台。它甚至(在大多数情况下)不需要安装新包。 无论如何都使用pyperclip
,所以最好使用pyperpclip
对于大多数人(即我)来说,pandas
随时可用,但 import pyperclip
不起作用。所以我不同意“更好地使用 pyperclip”。
如果你只能使用 pandas,你可以通过 import pandas.io.clipboard as pyperclip
直接使用 pyperclip 或者你想要的任何名字。这就是它在pandas
中的位置,至少
这似乎在您复制的字符串中添加了一个换行符【参考方案6】:
最简单的方法是使用pyperclip。在 python 2 和 3 中工作。
要安装此库,请使用:
pip install pyperclip
示例用法:
import pyperclip
pyperclip.copy("your string")
如果要获取剪贴板的内容:
clipboard_content = pyperclip.paste()
【讨论】:
pyperclip.paste()
不适用于图像只会返回 NoneType
错误。但可以右键单击并复制,然后使用 python 粘贴复制的结果。
@JayRizzo 该问题并未询问有关将图像复制到剪贴板的问题。但是,您可以使用 Pillow 库的 ImageGrab.grabclipboard() 模块(pip install Pillow)。【参考方案7】:
这是我发现的最简单和最可靠的方法,如果您可以依赖 Pandas。但是我不认为这是 Pandas API 的正式一部分,因此它可能会随着未来的更新而中断。它从 0.25.3 开始工作
from pandas.io import clipboard
clipboard.copy("test")
【讨论】:
对我有用,但我可能会使用from pandas.io import clipboard
然后 clipboard.copy(...)
以避免与其他 copy
方法混淆。【参考方案8】:
我尝试了各种解决方案,但这是通过my test的最简单的一个:
#coding=utf-8
import win32clipboard # http://sourceforge.net/projects/pywin32/
def copy(text):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
def paste():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
return data
if __name__ == "__main__":
text = "Testing\nthe “clip—board”: ?"
try: text = text.decode('utf8') # Python 2 needs decode to make a Unicode string.
except AttributeError: pass
print("%r" % text.encode('utf8'))
copy(text)
data = paste()
print("%r" % data.encode('utf8'))
print("OK" if text == data else "FAIL")
try: print(data)
except UnicodeEncodeError as er:
print(er)
print(data.encode('utf8'))
在 Windows 8.1 上的 Python 3.4 和 Windows 7 上的 Python 2.7 中测试正常。在使用从 Windows 复制的 Unix 换行符读取 Unicode 数据时也是如此。 Python 退出后复制的数据保留在剪贴板上:"Testing
the “clip—board”: ?"
如果您不希望外部依赖,请使用此代码(现在是跨平台 pyperclip
- C:\Python34\Scripts\pip install --upgrade pyperclip
的一部分):
def copy(text):
GMEM_DDESHARE = 0x2000
CF_UNICODETEXT = 13
d = ctypes.windll # cdll expects 4 more bytes in user32.OpenClipboard(None)
try: # Python 2
if not isinstance(text, unicode):
text = text.decode('mbcs')
except NameError:
if not isinstance(text, str):
text = text.decode('mbcs')
d.user32.OpenClipboard(0)
d.user32.EmptyClipboard()
hCd = d.kernel32.GlobalAlloc(GMEM_DDESHARE, len(text.encode('utf-16-le')) + 2)
pchData = d.kernel32.GlobalLock(hCd)
ctypes.cdll.msvcrt.wcscpy(ctypes.c_wchar_p(pchData), text)
d.kernel32.GlobalUnlock(hCd)
d.user32.SetClipboardData(CF_UNICODETEXT, hCd)
d.user32.CloseClipboard()
def paste():
CF_UNICODETEXT = 13
d = ctypes.windll
d.user32.OpenClipboard(0)
handle = d.user32.GetClipboardData(CF_UNICODETEXT)
text = ctypes.c_wchar_p(handle).value
d.user32.CloseClipboard()
return text
【讨论】:
你从哪里得到win32clipboard
?它不是我的 Python 2.7 的一部分。为什么paste
使用CF_TEXT
而不是CF_UNICODETEXT
?
@MarkRansom pywin32,因为我的测试运行良好,直到我使用 ? 变得更加困难。我已经更新了代码。【参考方案9】:
由于某种原因,我一直无法让 Tk 解决方案为我工作。 kapace's solution 更可行,但格式与我的风格相反,它不适用于 Unicode。这是修改后的版本。
import ctypes
from ctypes.wintypes import BOOL, HWND, HANDLE, HGLOBAL, UINT, LPVOID
from ctypes import c_size_t as SIZE_T
OpenClipboard = ctypes.windll.user32.OpenClipboard
OpenClipboard.argtypes = HWND,
OpenClipboard.restype = BOOL
EmptyClipboard = ctypes.windll.user32.EmptyClipboard
EmptyClipboard.restype = BOOL
GetClipboardData = ctypes.windll.user32.GetClipboardData
GetClipboardData.argtypes = UINT,
GetClipboardData.restype = HANDLE
SetClipboardData = ctypes.windll.user32.SetClipboardData
SetClipboardData.argtypes = UINT, HANDLE
SetClipboardData.restype = HANDLE
CloseClipboard = ctypes.windll.user32.CloseClipboard
CloseClipboard.restype = BOOL
CF_UNICODETEXT = 13
GlobalAlloc = ctypes.windll.kernel32.GlobalAlloc
GlobalAlloc.argtypes = UINT, SIZE_T
GlobalAlloc.restype = HGLOBAL
GlobalLock = ctypes.windll.kernel32.GlobalLock
GlobalLock.argtypes = HGLOBAL,
GlobalLock.restype = LPVOID
GlobalUnlock = ctypes.windll.kernel32.GlobalUnlock
GlobalUnlock.argtypes = HGLOBAL,
GlobalSize = ctypes.windll.kernel32.GlobalSize
GlobalSize.argtypes = HGLOBAL,
GlobalSize.restype = SIZE_T
GMEM_MOVEABLE = 0x0002
GMEM_ZEROINIT = 0x0040
unicode_type = type(u'')
def get():
text = None
OpenClipboard(None)
handle = GetClipboardData(CF_UNICODETEXT)
pcontents = GlobalLock(handle)
size = GlobalSize(handle)
if pcontents and size:
raw_data = ctypes.create_string_buffer(size)
ctypes.memmove(raw_data, pcontents, size)
text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
GlobalUnlock(handle)
CloseClipboard()
return text
def put(s):
if not isinstance(s, unicode_type):
s = s.decode('mbcs')
data = s.encode('utf-16le')
OpenClipboard(None)
EmptyClipboard()
handle = GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, len(data) + 2)
pcontents = GlobalLock(handle)
ctypes.memmove(pcontents, data, len(data))
GlobalUnlock(handle)
SetClipboardData(CF_UNICODETEXT, handle)
CloseClipboard()
paste = get
copy = put
自首次创建此答案以来,上述内容发生了变化,以更好地应对扩展的 Unicode 字符和 Python 3。它已在 Python 2.7 和 3.5 中进行了测试,甚至可以与 \U0001f601 (?)
等表情符号一起使用。
2021-10-26 更新:这在 Windows 7 和 Python 3.8 中对我来说非常有用。然后我得到了一台装有 Windows 10 和 Python 3.10 的新计算机,它以与 cmets 中所示相同的方式失败了。 This post 给了我答案。 ctypes
中的函数没有正确指定参数和返回类型,并且默认值与 64 位值不一致。我已经修改了上面的代码以包含缺失的信息。
【讨论】:
@CeesTimmerman 我很想拥有一个 Windows 8.1 系统来测试原因。我今天晚些时候可能有机会调查一下。您确定剪贴板中有文字吗? 是的。在过去的三天里,我在 Python 中广泛测试了剪贴板代码。put()
函数也需要工作;表情符号“?”(\U0001f400)被复制为“?”(\U0001f4cb)或“?”。变成“?”。
@CeesTimmerman 解释它。内部 Unicode 表示发生了变化,我不记得是 3.3 还是 3.4。要修复它,需要对 UTF-16 进行显式编码。这不是错误。
@YngvarKristiansen 我终于有时间进行这些更改。我现在确信这段代码适用于大多数现代版本的 Python 和所有可能的 Unicode 字符。【参考方案10】:
看起来您需要将 win32clipboard 添加到您的站点包中。它是pywin32 package的一部分
【讨论】:
用一些示例代码会是一个更好的答案。【参考方案11】:如果你不喜欢这个名字,你可以使用衍生模块clipboard
。
Note: It's just a selective wrapper of pyperclip
安装后,导入:
import clipboard
然后你可以这样复制:
clipboard.copy("This is copied")
您也可以粘贴复制的文本:
clipboard.paste()
【讨论】:
这似乎是最好的解决方案。剪贴板可以用pip install clipboard
安装。
clipboard
包只是pyperclip
包的无耻副本。如其代码here所示。
它是一个很好的字符串解决方案。字节呢?任何像这样的解决方案都可以在单行 python 中将字节复制到剪贴板【参考方案12】:
使用pyperclip
模块
使用 pip pip install pyperclip
安装。
将文本"Hello World!"
复制到剪贴板
import pyperclip
pyperclip.copy('Hello World!')
您可以在任何地方使用Ctrl+V
将其粘贴到某处。
使用 python 粘贴复制的文本
pyperclip.paste() # This returns the copied text of type <class 'str'>
【讨论】:
【参考方案13】:小部件还有一个名为 .clipboard_get()
的方法,该方法返回剪贴板的内容(除非根据剪贴板中的数据类型发生某种错误)。
此错误报告中提到了clipboard_get()
方法:http://bugs.python.org/issue14777
奇怪的是,我通常参考的常见(但非官方)在线 TkInter 文档资源中没有提到这种方法。
【讨论】:
【参考方案14】:我认为有一个更简单的解决方案。
name = input('What is your name? ')
print('Hello %s' % (name) )
然后在命令行中运行你的程序
pythongreeter.py |剪辑
这会将文件的输出通过管道传输到剪贴板
【讨论】:
这是一个很好的解决方案,但我想很多 python 都是在 IDE 中开发和运行的【参考方案15】:并非所有答案都适用于我的各种 python 配置,因此此解决方案仅使用 subprocess 模块。但是,copy_keyword
对于 Mac 必须是 pbcopy
,对于 Windows 必须是 clip
:
import subprocess
subprocess.run('copy_keyword', universal_newlines=True, input='New Clipboard Value ?')
这里有一些更广泛的代码,可以自动检查当前操作系统是什么:
import platform
import subprocess
copy_string = 'New Clipboard Value ?'
# Check which operating system is running to get the correct copying keyword.
if platform.system() == 'Darwin':
copy_keyword = 'pbcopy'
elif platform.system() == 'Windows':
copy_keyword = 'clip'
subprocess.run(copy_keyword, universal_newlines=True, input=copy_string)
【讨论】:
当您尝试粘贴该字符串时,IDLE 崩溃。 @MaxDoesStuff 尝试不使用表情符号。我不知道为什么这在默认 IDLE 中不起作用,但它在其他 IDLE 中起作用。【参考方案16】:除了Mark Ransom's answer 使用ctypes: 这不适用于(所有?)x64 系统,因为句柄似乎被截断为 int 大小。 显式定义 args 和返回值有助于克服这个问题。
import ctypes
import ctypes.wintypes as w
CF_UNICODETEXT = 13
u32 = ctypes.WinDLL('user32')
k32 = ctypes.WinDLL('kernel32')
OpenClipboard = u32.OpenClipboard
OpenClipboard.argtypes = w.HWND,
OpenClipboard.restype = w.BOOL
GetClipboardData = u32.GetClipboardData
GetClipboardData.argtypes = w.UINT,
GetClipboardData.restype = w.HANDLE
EmptyClipboard = u32.EmptyClipboard
EmptyClipboard.restype = w.BOOL
SetClipboardData = u32.SetClipboardData
SetClipboardData.argtypes = w.UINT, w.HANDLE,
SetClipboardData.restype = w.HANDLE
CloseClipboard = u32.CloseClipboard
CloseClipboard.argtypes = None
CloseClipboard.restype = w.BOOL
GHND = 0x0042
GlobalAlloc = k32.GlobalAlloc
GlobalAlloc.argtypes = w.UINT, w.ctypes.c_size_t,
GlobalAlloc.restype = w.HGLOBAL
GlobalLock = k32.GlobalLock
GlobalLock.argtypes = w.HGLOBAL,
GlobalLock.restype = w.LPVOID
GlobalUnlock = k32.GlobalUnlock
GlobalUnlock.argtypes = w.HGLOBAL,
GlobalUnlock.restype = w.BOOL
GlobalSize = k32.GlobalSize
GlobalSize.argtypes = w.HGLOBAL,
GlobalSize.restype = w.ctypes.c_size_t
unicode_type = type(u'')
def get():
text = None
OpenClipboard(None)
handle = GetClipboardData(CF_UNICODETEXT)
pcontents = GlobalLock(handle)
size = GlobalSize(handle)
if pcontents and size:
raw_data = ctypes.create_string_buffer(size)
ctypes.memmove(raw_data, pcontents, size)
text = raw_data.raw.decode('utf-16le').rstrip(u'\0')
GlobalUnlock(handle)
CloseClipboard()
return text
def put(s):
if not isinstance(s, unicode_type):
s = s.decode('mbcs')
data = s.encode('utf-16le')
OpenClipboard(None)
EmptyClipboard()
handle = GlobalAlloc(GHND, len(data) + 2)
pcontents = GlobalLock(handle)
ctypes.memmove(pcontents, data, len(data))
GlobalUnlock(handle)
SetClipboardData(CF_UNICODETEXT, handle)
CloseClipboard()
#Test run
paste = get
copy = put
copy("Hello World!")
print(paste())
【讨论】:
【参考方案17】:使用python的剪贴板库!
import clipboard as cp
cp.copy("abc")
剪贴板现在包含“abc”。粘贴愉快!
【讨论】:
你从哪里得到clipboard
?至少它不在 Anaconda Python 3.7 的标准库中。
clipboard
只是导入pyperclip
。真的。仅此而已。【参考方案18】:
你也可以使用 > clipboard
import clipboard
def copy(txt):
clipboard.copy(txt)
copy("your txt")
【讨论】:
或者只是:copy = clipboard.copy
,或者更好的是from clipboard import copy
。【参考方案19】:
import wx
def ctc(text):
if not wx.TheClipboard.IsOpened():
wx.TheClipboard.Open()
data = wx.TextDataObject()
data.SetText(text)
wx.TheClipboard.SetData(data)
wx.TheClipboard.Close()
ctc(text)
【讨论】:
对问题和解决方案的解释会很有帮助。 一个将文本复制到剪贴板的函数。使用 wx python 库(我从未学过 TK)这里提出的问题的另一种解决方案。 随意编辑答案以包括您对问题/解决方案的解释@jlk - 这样做通常会使答案更有用。另外,感谢您的尝试,但我想原始发布者有理由专门要求 Tk。【参考方案20】:我在这里分享的 sn-p 利用了格式化文本文件的能力:如果你想将复杂的输出复制到剪贴板怎么办? (比如列中的 numpy 数组或某物的列表)
import subprocess
import os
def cp2clip(clist):
#create a temporary file
fi=open("thisTextfileShouldNotExist.txt","w")
#write in the text file the way you want your data to be
for m in clist:
fi.write(m+"\n")
#close the file
fi.close()
#send "clip < file" to the shell
cmd="clip < thisTextfileShouldNotExist.txt"
w = subprocess.check_call(cmd,shell=True)
#delete the temporary text file
os.remove("thisTextfileShouldNotExist.txt")
return w
仅适用于 windows,我猜可以适用于 linux 或 mac。可能有点复杂……
示例:
>>>cp2clip(["ET","phone","home"])
>>>0
在任何文本编辑器中按Ctrl+V:
ET
phone
home
【讨论】:
【参考方案21】:这是atomizer的改进答案。
注意 2 次调用 update()
和 200 ms
之间的延迟。由于剪贴板状态不稳定,它们可以保护冻结的应用程序:
from Tkinter import Tk
import time
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append('some string')
r.update()
time.sleep(.2)
r.update()
r.destroy()
【讨论】:
time.sleep 不适用于 tkinter。推荐r.after
在这种情况下,time.sleep()
工作得很好。【参考方案22】:
你可以使用winclip32模块! 安装:
pip install winclip32
复制:
import winclip32
winclip32.set_clipboard_data(winclip32.UNICODE_STD_TEXT, "some text")
得到:
import winclip32
print(winclip32.get_clipboard_data(winclip32.UNICODE_STD_TEXT))
更多信息:https://pypi.org/project/winclip32/
【讨论】:
【参考方案23】:在 Windows 上,您可以使用它。没有外部依赖也不必打开子流程:
import win32clipboard
def to_clipboard(txt):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(txt)
win32clipboard.CloseClipboard()
【讨论】:
【参考方案24】:如果(且仅当)应用程序已经使用 Qt,您可以使用它(优点是没有额外的第三方依赖)
from PyQt5.QtWidgets import QApplication
clipboard = QApplication.clipboard()
# get text (if there's text inside instead of e.g. file)
clipboard.text()
# set text
clipboard.setText(s)
这需要已经构造了一个 Qt 应用程序对象,因此除非应用程序已经使用 Qt,否则不应使用它。
除此之外,像往常一样,在 X 系统(可能还有其他系统)中,除非您使用 parcellite 或 xclipboard 之类的东西,否则内容只会持续到应用程序存在为止。
文档:
QGuiApplication Class | Qt GUI 5.15.6 QClipboard Class | Qt GUI 5.15.6另见:python - PyQT - copy file to clipboard - Stack Overflow
【讨论】:
【参考方案25】:代码 sn-p 复制剪贴板:
在名为 (clipboard.py) 的模块中创建包装 Python 代码:
import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
def setText(text):
Clipboard.SetText(text)
def getText():
return Clipboard.GetText()
然后将上面的模块导入到你的代码中。
import io
import clipboard
code = clipboard.getText()
print code
code = "abcd"
clipboard.setText(code)
我必须感谢博文Clipboard Access in IronPython。
【讨论】:
【参考方案26】:你可以试试这个:
command = 'echo content |clip'
subprocess.check_call(command, shell=True)
【讨论】:
以上是关于如何将字符串复制到剪贴板?的主要内容,如果未能解决你的问题,请参考以下文章