2012-02-17 42 views
7

每当我在我的python解释器中尝试以下操作。我能够单词Hello 复制到命令行,即使我关闭解释无法追加到剪贴板

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

但是如果我把这个文件称为test.py,然后尝试

python test.py 

这就不行,我不能追加该系统剪贴板

是否有任何人知道为什么没有或不知道会造成一个脚本,并在解释器运行它之间有什么区别

+0

如果你要让解开器打开,那是因为(第一种情况)。一旦python运行并清理自己,它将清除剪贴板中的内容。 – dennmat 2012-02-17 14:54:13

+0

正如我在问题中指出的那样,我关闭了解释器,它仍将它复制到剪贴板。 – samirahmed 2012-02-17 22:45:25

+1

错过了那个部分,不过你应该首先调用clipboard_clear来确保没有什么脏东西。然而,我不确定为什么它们在两者之间会有所不同,因为它们确实是完全相同的东西。希望有人为你解答。 – dennmat 2012-02-17 23:16:45

回答

4

显然只有Tkinter进入主循环后才能使用。这适用于我的系统:

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

'r.update()'也足够了,如果你不想要一个主循环。 – 2014-12-03 17:10:53

+0

如果我不想要主循环,该怎么办?我希望我的程序在此之后终止。 'r.update()'没有帮助。使用超时作为解决方法(见下文)确实有效 – Blauhirn 2016-11-28 16:56:30

2

我也看到了这种差异。建议的tkinter解决方案可以通过命令行将文本放置在剪贴板上,但在程序中使用时会将剪贴板留空。在程序结束时使用mainloop(),但意味着程序不会结束,而使用r.update()似乎没有帮助。

注意:如果剪贴板在程序结束前粘贴到另一个应用程序(通过使程序在最后等待用户输入时挂起),那么tkinter解决方案即使在程序结束后也能正常工作。但是,如果程序在剪贴板粘贴到另一个程序之前结束,剪贴板将变为空白。

1

像deel,帕特里克牛逼Neslon和其他人的建议,使用:

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

没有在非GUI应用程序正常工作(更新也不能工作)(赢7/64,巨蟒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这一个工具,我会用,不是我愿意分布非常广泛,除非有更多经验的人说它的可靠性...