【问题标题】:Tkinter in Python 3.4 on Windows don't post internal clipboard data to the Windows clipboard on exitWindows 上 Python 3.4 中的 Tkinter 不会在退出时将内部剪贴板数据发布到 Windows 剪贴板
【发布时间】:2014-12-06 22:00:06
【问题描述】:

我使用以下代码将我的小脚本的结果放在剪贴板中。

from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append("Result")

它在 Python 3.3.5 及更早版本上运行良好。但是当我升级到 Python 3.4 时,它收到了空剪贴板。我尝试了 3.4.0、3.4.1 和 3.4.2 并且都收到了一个结果(空剪贴板)。如果我阻止脚本立即退出,在clipboard_append() 之后添加input(),我会看到剪贴板包含正确的“结果”。

更新1:

修改后的测试脚本显示问题不是时序问题:

from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
r.clipboard_append("Result")
input()
r.destroy()

如果我运行此脚本,请等待几秒钟,然后按 Enter,我会收到空​​剪贴板。

如果我运行脚本,切换到任何其他窗口并按 Ctrl+V,我会收到“结果”并且脚本退出后“结果”仍保留在剪贴板中。

我认为在 tcl/tk 8.6 clipboard_clear() 影响系统剪贴板,但 clipboard_append 仅影响仅由操作系统请求传输到系统剪贴板的内部 tcl/tk 剪贴板。看起来它是在没有系统剪贴板的 Linux 中完成的。

更新2:

Tk changelog 中最后提到的剪贴板指的是 2004:

2004-05-03 (bug fix)[939389, 822002, 732662] Correctly post internal 
clipboard data to the Windows clipboard on exit. (hobbs)

2004 年纠正的错误似乎在 10 年后又回到了我们身边。

【问题讨论】:

  • 我也遇到了同样的问题,希望你发布一个错误报告... (bugs.python.org)

标签: python windows tkinter clipboard python-3.4


【解决方案1】:

添加一些延迟在我的电脑(win10,python3.7)中很有用:

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()

【讨论】:

    【解决方案2】:

    我怀疑“结果”永远不会进入剪贴板,而不是被清除。 Windows 上的 3.4 带有 tcl/tk 8.6 而不是 8.5。我怀疑这是差异,并且可能是时间问题。追加后的r.destroy 是否有效?在退出 python 之前显式销毁 tk 根通常是一个好主意。在我们开始这样做之前,我们的测试套件一直存在问题。

    【讨论】:

    • 修改后的测试脚本显示问题不是时序问题:
    • 我写的太多,无法评论。我通过添加新的结果和想法更新了我的问题。
    • 我刚刚在 Win7 上用 3.4.2 尝试了你原来的 5 行,它可以工作。我没有其他想法为什么不适合你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    • 2017-02-11
    • 2019-12-26
    • 1970-01-01
    • 2010-11-07
    • 1970-01-01
    • 2013-01-16
    相关资源
    最近更新 更多