我正在我的 python 应用程序中实现一个剪贴板监视器。如果复制的文本满足某些要求,我想向用户显示一个对话框。如果用户点击“是”我想触发一个功能 - 在这种情况下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();
有什么建议可以做得更好吗?我正在考虑如何在不需要退出方法的情况下显示对话框,或者更安全地使用线程。感谢任何帮助