[英]Python tkinter text widget 'Modified' event doesn't seem to fire correctly
我想監視 tkinter Text
小部件中的文本何時被修改,以便用戶可以保存他們輸入的任何新數據。 然后按“保存”我想重置它。
我將Text
小部件的<<Modified>>
事件綁定到 function,以便對文本進行任何更改都會將“保存”按鈕從'disabled'
更新為'normal'
state。點擊保存按鈕后,我運行了一個 function,它重置了modified
的標志並再次禁用“保存”按鈕,直到進行進一步的更改。
但是我發現它似乎只觸發一次事件。 點擊保存並沒有將按鈕重置為'disabled'
state,並且在第一次之后編輯文本似乎也沒有影響保存按鈕的 state。
下面是一個最小的例子,展示了標志似乎沒有被重置。
import tkinter as tk
root = tk.Tk()
def text_modified(event=None):
status_label.config(text="Modified = True")
def reset():
if not text_widget.edit_modified():
return
status_label.config(text="Modified = False")
text_widget.edit_modified(False)
text_widget = tk.Text(root, width=30, height=5)
text_widget.pack()
text_widget.bind("<<Modified>>", text_modified)
status_label = tk.Label(root, text="Modified = False")
status_label.pack()
reset_btn = tk.Button(root, text="Reset", command=reset)
reset_btn.pack()
root.mainloop()
事實證明,將<<Modified>>
事件綁定到 function 意味着 function 不會在Text
小部件文本更改時運行,而是在modified
標志更改時運行 - 無論它更改為True
還是False
。 所以我的 Save 按鈕正在保存數據,禁用自身,並將modified
的標志重置為False
,並且此標志更改觸發了<<Modified>>
事件,該事件綁定到 function 再次取消禁用 Save 按鈕。
這是一個顯示正在發生的事情的最小示例。 我們只需要調整我們綁定<<Modified>>
事件的 function,以便它也處理modified
為False
的情況:
import tkinter as tk
root = tk.Tk()
def modified_flag_changed(event=None):
if text_widget.edit_modified():
status_label.config(text="Modified = True")
print("Text modified")
else:
print("Modified flag changed to False")
def reset():
if not text_widget.edit_modified():
print("Doesn't need resetting")
return
status_label.config(text="Modified = False")
text_widget.edit_modified(False)
print('Reset')
text_widget = tk.Text(root, width=30, height=5)
text_widget.pack()
text_widget.bind("<<Modified>>", modified_flag_changed)
status_label = tk.Label(root, text="Modified = False")
status_label.pack()
reset_btn = tk.Button(root, text="Reset", command=reset)
reset_btn.pack()
root.mainloop()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.