无法追加到剪贴板

9 投票
3 回答
6040 浏览
提问于 2025-04-17 13:09

每当我在我的Python解释器中尝试以下操作时,我都能把“hello”这个词复制到命令行,即使我关闭了解释器也没问题。

from Tkinter import Tk
r = Tk()
r.clipboard_append(" hello ")

但是如果我把这个放在一个叫做test.py的文件里,然后尝试

python test.py

这样就不行了,我无法把它添加到系统剪贴板。

有没有人知道为什么会这样,或者在脚本中运行和在解释器中运行有什么不同导致这个问题?

3 个回答

1

像deel一样,Patrick T Neslon和其他人建议使用:

from Tkinter import *
r = Tk()
r.clipboard_append("hello")
r.mainloop()

但在非图形界面的应用程序中并没有奏效(更新也没用)(Win 7/64,Python 2.7.10/32)。不过,这个方法可以用,虽然看起来有点像是个小窍门,灵感来自于https://bugs.python.org/issue23760

from Tkinter import *
r = Tk()
r.clipboard_clear()
r.clipboard_append("hello")
r.after(500, tk.destroy)
r.mainloop()

在我的系统上,100毫秒通常是有效的,所以我选择了500毫秒。这个是我自己会用的工具,不是我想要广泛分发的东西,除非有经验更丰富的人说这个方法可靠……

2

我也发现了这个行为的不同。建议使用tkinter来将文本放到剪贴板上的方法在命令行中运行得很好,但在程序中使用时剪贴板却是空的。在程序最后加上mainloop()可以解决这个问题,但这样程序就不会结束,而使用r.update()似乎也没有什么帮助。

注意:如果在程序结束之前把剪贴板的内容粘贴到其他应用程序中(比如让程序在最后停住,等待用户输入),那么tkinter的方法就能正常工作,即使程序已经结束。但如果程序在剪贴板内容被粘贴到其他程序之前就结束了,剪贴板就会变成空的。

7

看起来在Tkinter进入主循环之前是无法工作的。这个代码在我的系统上可以正常运行:

from Tkinter import *
r = Tk()
r.clipboard_append("hello")
r.mainloop()

撰写回答