gpt4 book ai didi

python - Tk().withdraw() 适合从线程运行吗?

转载 作者:行者123 更新时间:2023-12-01 05:44:52 25 4
gpt4 key购买 nike

我正在我的 python 应用程序中实现剪贴板监视器。如果复制的文本满足某些要求,我想向用户显示一个对话框。如果用户单击"is",我想触发一个函数 - 在本例中为 webui.app.add_internal(cb) 。如果用户选择“否”,我想以 3 秒的间隔继续检查剪贴板是否有更改。

一切似乎都工作正常,但这段代码并没有像我期望的那样反复不间断地运行。稍微调查一下就会发现 Tk().withdraw() 似乎是有问题的行。尽管没有它,Tk 的主空白窗口将出现在所显示的对话框旁边,并且用户的最后一个选择似乎会被记住以备后用(这不是所希望的)。

考虑以下代码:

import pyperclip
import tkMessageBox, Tkinter
import threading

cbOld = "notAurl"
def catchClipboardChange():
global cbOld
cb = pyperclip.paste()
Tkinter.Tk().withdraw()
if (cb != cbOld):
#Change in clipboard detected. Analize!
if (urlValidation(cb) and isDownloadExt(cb) and tkMessageBox.askyesno("Start downloading?","Do you want to start downloading {}".format(cb))):
webui.app.add_internal(cb)
cbOld = cb # Old clipboard update
threading.Timer(3.0,catchClipboardChange).start()

catchClipboardChange();

有什么建议可以做得更好吗?我正在考虑如何在不需要撤回方法的情况下显示对话框,或者更安全的方式将其与线程一起使用。感谢任何帮助

最佳答案

不可以,您不能从主线程以外的其他线程调用 withdraw()

关于python - Tk().withdraw() 适合从线程运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16398838/

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