【问题标题】:Unable to append to clipboard无法附加到剪贴板
【发布时间】:2012-03-08 11:42:45
【问题描述】:

每当我在我的 python 解释器中尝试以下操作时。我可以复制你好这个词 到命令行,即使我关闭了解释器

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

但是,如果我把它放在一个名为 test.py 的文件中然后尝试

python test.py

这不起作用,我无法将其附加到系统剪贴板

有谁知道为什么不知道,或者知道在脚本和解释器中运行它会导致什么区别

【问题讨论】:

  • 如果您让解释器保持打开状态,那是因为(对于第一种情况)。一旦 python 运行并清理它自己,它将清除剪贴板中的内容。
  • 正如我在问题中指定的那样,我关闭了解释器,它仍然将其复制到剪贴板。
  • 错过了那部分,但是无论如何你都应该先调用 clipboard_clear 以确保那里没有脏东西。但是我不确定为什么两者之间会有所不同,因为它们实际上是完全相同的东西。希望有人能给你答案。
  • 即使python 3 似乎也无法解决这个问题。

标签: python tkinter tk


【解决方案1】:

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

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

在非 gui 应用程序中不起作用(更新也不起作用)(Win 7/64,Python 2.7.10/32)。虽然这似乎是一个 hack,但它的工作原理是受 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 解决方案可以正常工作,即使在程序结束之后也是如此。但是如果程序在剪贴板粘贴到另一个程序之前结束,剪贴板最终会是空的。

    【讨论】:

      【解决方案3】:

      显然在 Tkinter 进入它的主循环之前它不会工作。这适用于我的系统:

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

      【讨论】:

      • 如果我不想要主循环怎么办?我希望我的程序在此之后终止。 r.update() 没有帮助。使用超时作为解决方法(见下文)确实有效
      猜你喜欢
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      相关资源
      最近更新 更多