我试图使一个基本的Windows应用程序构建出用户输入的字符串,然后将其添加到剪贴板。如何使用Python将字符串复制到剪贴板?
当前回答
实际上,对于这个简单的任务,pywin32和ctypes似乎是多余的。tkinter是一个跨平台的GUI框架,默认情况下与Python一起发布,并具有剪贴板访问方法和其他很酷的东西。
如果你所需要的只是将一些文本放入系统剪贴板,这将做到:
from tkinter import Tk # in Python 2, use "Tkinter" instead
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 2,请将tkinter替换为tkinter。
其他回答
看起来您需要将win32clipboard添加到站点包中。它是pywin32包的一部分
你也可以使用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()
如果(仅当)应用程序已经使用了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 -复制文件到剪贴板-堆栈溢出
这是我发现的最简单可靠的方法,如果你可以依赖熊猫。然而,我不认为这是熊猫API的官方部分,所以它可能会打破未来的更新。它的工作为0.25.3
from pandas.io import clipboard
clipboard.copy("test")
使用pyperclip模块
使用pip安装pyperclip。
https://pypi.org/project/pyperclip/
复制文本“Hello World!”到剪贴板
import pyperclip
pyperclip.copy('Hello World!')
你可以在任何地方使用Ctrl+V来粘贴它。
使用python粘贴复制的文本
pyperclip.paste() # This returns the copied text of type <class 'str'>
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 我如何找到哪个程序正在使用端口80在Windows?
- 使用try和。Python中的if