是否可以将所有小部件绑定到一个命令,只需一行?如果我可以键入一行而不是单独执行每个小部件,那将是很好的。
答案 0 :(得分:8)
您可以在根窗口中使用bind_all方法。这将适用于所有小部件(除非您从某些小部件中删除“全部”绑定标签)。请注意,这些绑定最后会触发,因此如果您愿意,仍可以覆盖特定小部件上的应用程序范围绑定。
这是一个人为的例子:
import Tkinter as tk
class App:
def __init__(self):
root = tk.Tk()
root.bind_all("<1>", self.woot)
label1 = tk.Label(text="Label 1", name="label1")
label2 = tk.Label(text="Label 2", name="label2")
entry1 = tk.Entry(name="entry1")
entry2 = tk.Entry(name="entry2")
label1.pack()
label2.pack()
entry1.pack()
entry2.pack()
root.mainloop()
def woot(self, event):
print "woot!", event.widget
app=App()
您可能也会对问题my answer感兴趣How to bind self events in Tkinter Text widget after it will binded by Text widget?,我会在这里讨论一下bindtags。
答案 1 :(得分:-1)
如果您有一个包含所有小部件的列表,您可以迭代它们并分配事件。
答案 2 :(得分:-1)
您还可以定义一个调用所有小部件的函数,并调用该函数。或者更好的是创建一个在 init 中调用小部件的类并导入类...
答案 3 :(得分:-1)
你的意思是这个代码可以处理用单个函数处理的所有鼠标事件吗?
from Tkinter import *
class ButtonHandler:
def __init__(self):
self.root = Tk()
self.root.geometry('600x500+200+200')
self.mousedown = False
self.label = Label(self.root, text=str(self.mousedown))
self.can = Canvas(self.root, width='500', height='400', bg='white')
self.can.bind("<Motion>",lambda x:self.handler(x,'motion'))
self.can.bind("<Button-1>",lambda x:self.handler(x,'press'))
self.can.bind("<ButtonRelease-1>",lambda x:self.handler(x,'release'))
self.label.pack()
self.can.pack()
self.root.mainloop()
def handler(self,event,button_event):
print('Handler %s' % button_event)
if button_event == 'press':
self.mousedown = True
elif button_event == 'release':
self.mousedown = False
elif button_event == 'motion':
if self.mousedown:
r = 5
self.can.create_oval(event.x-r, event.y-r, event.x+r, event.y+r, fill="orange")
self.label.config(text=str(self.mousedown))
button_event = ButtonHandler()