Tk().draft()是否适合从线程运行?

2024-10-01 04:53:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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();

有什么建议可以做得更好?我在考虑如何在不需要撤销方法的情况下显示对话框,或者在线程中使用更安全的方法。有什么帮助吗


Tags: 代码用户importaddapptk对话框internal