亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 tkinter python 中執行(“after”腳本)時如何處理無效命令名稱錯誤

在 tkinter python 中執行(“after”腳本)時如何處理無效命令名稱錯誤

富國滬深 2023-06-27 13:35:12
我知道這個問題已經在這里被多次提出,而且我已經仔細考慮過所有這些問題。但我沒有找到解決該問題的明確方法。我知道發生這個錯誤的原因。我知道使用后root.destroy(),還有一些工作需要完成等等。但我想知道如何停止那些“之后”的工作?其中一個人要求在代碼中使用try/ 。accept但他沒有展示如何使用它。那么您能為這個案例提供一個明確的解決方案嗎?有什么辦法可以消除這個錯誤嗎?我請求您不要將此問題標記為重復,也不要刪除此問題。這很重要,而且我沒有其他來源可以得到答案。invalid command name "2272867821888time"    while executing"2272867821888time"    ("after" script)
查看完整描述

1 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

在執行調度的回調之前銷毀窗口時會發生此錯誤after。為了避免這種問題,您可以存儲調度回調時返回的 id,并在銷毀窗口時取消它,例如使用protocol('WM_DELETE_WINDOW', quit_function).


這是一個例子:


import tkinter as tk


def callback():

    global after_id

    var.set(var.get() + 1)

    after_id = root.after(500, callback)


def quit():

    """Cancel all scheduled callbacks and quit."""

    root.after_cancel(after_id)

    root.destroy()


root = tk.Tk()

root.pack_propagate(False)

var = tk.IntVar()

tk.Label(root, textvariable=var).pack()

callback()

root.protocol('WM_DELETE_WINDOW', quit)

root.mainloop()

此外,Tcl/Tk 有一個after info方法,不能通過 python 包裝器直接訪問,但可以使用調用root.tk.eval('after info')并返回 ids: 字符串'id1 id2 id3'。因此,跟蹤所有 id 的另一種方法是使用:


import tkinter as tk


def callback():

    var.set(var.get() + 1)

    root.after(500, callback)


def quit():

    """Cancel all scheduled callbacks and quit."""

    for after_id in root.tk.eval('after info').split():

        root.after_cancel(after_id)

    root.destroy()


root = tk.Tk()

root.pack_propagate(False)

var = tk.IntVar()

tk.Label(root, textvariable=var).pack()

callback()

root.protocol('WM_DELETE_WINDOW', quit)

root.mainloop()


查看完整回答
反對 回復 2023-06-27
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號