1

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

これを改善する方法について何か提案はありますか? 撤回メソッドを必要とせずにダイアログを表示する方法、またはスレッドでそれを使用するより安全な方法のいずれかを考えていました。どんな助けにも感謝します

4

1 に答える 1

2

withdraw()いいえ、メイン スレッド以外の別のスレッドから呼び出すことはできません。

于 2013-05-06T12:42:24.023 に答える