gpt4 book ai didi

python - Windows 上 Python 3.4 中的 Tkinter 在退出时不会将内部剪贴板数据发布到 Windows 剪贴板

转载 作者:太空狗 更新时间:2023-10-29 21:09:50 25 4
gpt4 key购买 nike

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

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年后又回到了我们身边。

最佳答案

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

关于python - Windows 上 Python 3.4 中的 Tkinter 在退出时不会将内部剪贴板数据发布到 Windows 剪贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com