首頁 >後端開發 >Python教學 >如何確保我的自訂 Tkinter 文字小工具綁定在內建綁定之後執行?

如何確保我的自訂 Tkinter 文字小工具綁定在內建綁定之後執行?

Susan Sarandon
Susan Sarandon原創
2024-11-04 07:21:021001瀏覽

How Can I Ensure My Custom Tkinter Text Widget Bindings Execute After Built-in Bindings?

內建綁定後在Tkinter 文字小部件中綁定自訂事件

理解問題

理解問題

理解問題

在Tkinter 的文字小工具中,您可能會遇到這樣的情況:您的自訂事件綁定在小部件的內建綁定之前執行,從而導致文字更新出現差異。

解決方案

要解決此問題,您可以更改事件的處理順序。 Tkinter 小部件被分配了一個「bindtags」層次結構,用於確定綁定執行的順序。

<code class="python"># Modify the bindtags to rearrange the order
entry.bindtags(('Entry', '.entry', '.', 'all'))</code>

1.重新排列 Bindtags

bindtags 的預設順序是:widget、class、toplevel、all。您可以將小部件綁定標籤放置在類別綁定標籤之後來變更順序。這樣,類別綁定將在小部件綁定之前執行。

<code class="python"># Create a new bindtag "post-class-bindings" after the class bindtag
entry.bindtags(('.entry','Entry','post-class-bindings', '.', 'all'))

# Bind your custom events to "post-class-bindings"
entry.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)</code>

2.引入附加綁定標籤

或者,您可以在類bindtag之後創建一個新的綁定標籤,並將自訂事件綁定定到這個新標籤。
  • 兩種方法的優點
  • 重新排列綁定標籤:
影響小部件上的所有綁定。

引入新的綁定標籤:

允許基於事件的選擇性綁定

<code class="python">import Tkinter

def OnKeyPress(event):
    value = event.widget.get()
    string="value of %s is '%s'" % (event.widget._name, value)
    status.configure(text=string)

root = Tkinter.Tk()

entry1 = Tkinter.Entry(root, name="entry1")
entry2 = Tkinter.Entry(root, name="entry2")
entry3 = Tkinter.Entry(root, name="entry3")

# Three different bindtags
entry1.bindtags(('.entry1', 'Entry', '.', 'all'))
entry2.bindtags(('Entry', '.entry2', '.', 'all'))
entry3.bindtags(('.entry3','Entry','post-class-bindings', '.', 'all'))

# Bind the first two entries to the default bind tags
entry1.bind("<KeyPress>", OnKeyPress)
entry2.bind("<KeyPress>", OnKeyPress)

# Bind the third entry to the "post-class-bindings" bind tag
entry3.bind_class("post-class-bindings", "<KeyPress>", OnKeyPress)

# ... Continue with your GUI code
</code>
範例程式碼範例程式碼範例程式碼以下程式碼示範了兩種方法:

以上是如何確保我的自訂 Tkinter 文字小工具綁定在內建綁定之後執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn