<event> 和 <<event>> 之间的 Tkinter 区别
Tkinter difference between <event> and <<event>>
我很难在 Internet 上查找此内容 - 我的搜索技巧还不够好。我可以记住事件名称,但我总是要查找要使用的尖括号类型
一些 tkinter 事件与 <> 中的单词绑定,例如
tab4e.bind("<Button-1>",f_x)
其他在<<>>,例如
nbook.bind('<<NotebookTabChanged>>', handle_tab_changed)
为什么有些绑定在 <> 中,而另一些在 <<>> 中?
尽管 python 中给出了示例,但我添加了 TCL,以防 TCL 编码人员可能知道答案。
具有一组括号的绑定是 built-in 由底层 OS 直接支持的事件。示例包括 <KeyPress>
、<ButtonPress-1>
、<Configure>
等等。大多数 built-in 事件与实际的物理事件直接相关,例如按下鼠标按钮或键盘上的按键。
与 double-brackets 的绑定称为 虚拟事件。它们不一定代表任何类型的物理事件,并且通常(尽管不总是)是特定小部件所独有的。例如,<<ListboxSelect>>
仅供列表框使用,<<NotebookTabChanged>>
仅供ttk笔记本使用,等等。
虚拟事件可以通过使用 event_add
小部件方法的其他事件的组合来触发,尽管它们也可以通过调用 event_generate
.
来生成
tcl/tk 手册页包括 list of predefined virtual events。
(保留@Oakley 的回答)
这是自定义事件的示例:
from tkinter import *
import random
def button_click():
num = random.randint(1,10) # data to pass, state must be integer
root.event_generate("<<myevent>>", when="tail", state=num) # add event to end of event queue, pass state (optional)
def myhandler(evt): # handle custom event
print('custom event handled', evt.state)
root = Tk()
button = Button(root, text="Click Me!", command=button_click)
root.bind("<<myevent>>", myhandler) # create custom event and set handler
button.pack()
root.mainloop()
我很难在 Internet 上查找此内容 - 我的搜索技巧还不够好。我可以记住事件名称,但我总是要查找要使用的尖括号类型
一些 tkinter 事件与 <> 中的单词绑定,例如
tab4e.bind("<Button-1>",f_x)
其他在<<>>,例如
nbook.bind('<<NotebookTabChanged>>', handle_tab_changed)
为什么有些绑定在 <> 中,而另一些在 <<>> 中?
尽管 python 中给出了示例,但我添加了 TCL,以防 TCL 编码人员可能知道答案。
具有一组括号的绑定是 built-in 由底层 OS 直接支持的事件。示例包括 <KeyPress>
、<ButtonPress-1>
、<Configure>
等等。大多数 built-in 事件与实际的物理事件直接相关,例如按下鼠标按钮或键盘上的按键。
与 double-brackets 的绑定称为 虚拟事件。它们不一定代表任何类型的物理事件,并且通常(尽管不总是)是特定小部件所独有的。例如,<<ListboxSelect>>
仅供列表框使用,<<NotebookTabChanged>>
仅供ttk笔记本使用,等等。
虚拟事件可以通过使用 event_add
小部件方法的其他事件的组合来触发,尽管它们也可以通过调用 event_generate
.
tcl/tk 手册页包括 list of predefined virtual events。
(保留@Oakley 的回答)
这是自定义事件的示例:
from tkinter import *
import random
def button_click():
num = random.randint(1,10) # data to pass, state must be integer
root.event_generate("<<myevent>>", when="tail", state=num) # add event to end of event queue, pass state (optional)
def myhandler(evt): # handle custom event
print('custom event handled', evt.state)
root = Tk()
button = Button(root, text="Click Me!", command=button_click)
root.bind("<<myevent>>", myhandler) # create custom event and set handler
button.pack()
root.mainloop()