from tkinter import *
main = Tk()
def flipper(event):
# I'd like to do this:
#if widgetname == switcher:
#do stuff
#if widgetname == switcher1:
#do stuff
return
switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("", flipper)
switcher1 = Label(main, bg='white', text="click here", font="-weight bold")
switcher1.grid()
switcher1.bind("", flipper)
switcher2 = Label(main, bg='white', text="click here", font="-weight bold")
switcher2.grid()
switcher2.bind("", flipper)
switcher3 = Label(main, bg='white', text="click here", font="-weight bold")
switcher3.grid()
switcher3.bind("", flipper)
switcher4 = Label(main, bg='white', text="click here", font="-weight bold")
switcher4.grid()
switcher4.bind("", flipper)
switcher5 = Label(main, bg='white', text="click here", font="-weight bold")
switcher5.grid()
switcher5.bind("", flipper)
main.mainloop()
在我的事件函数中,我想根据点击的标签做不同的事情。我难过的是,我只能得到被点击的小部件的标识符号,而不是名称。如果我可以获得所有小部件的标识符,那么我可以这样做:
def flipper(event):
if event.widget == switcher.identifier():
do stuff
但我也找不到如何获取指定小部件的 id...
如何通过标识符 (event.widget()
) 获取小部件的名称?
hoặc如何获取指定小部件名称的标识符?
如果两者都不可能,那么我必须创建一个不同的函数并为每个标签绑定(bind),希望这是不必要的大量工作。
biên tập:
from tkinter import *
main = Tk()
def flipper(event, switch):
if switch.widget == 's1':
print("got it")
switcher = Label(main, bg='white', text="click here", font="-weight bold")
switcher.grid()
switcher.bind("", flipper)
switcher.widget = 's1'
main.mainloop()
您无法获取分配给小部件的变量名,那将是相对无用的。一个小部件可以分配给多个变量,或者根本没有。
获取标签文本
您可以访问实际的小部件,并且可以使用它来获取标签上的文本。您的示例显示所有标签都相同,因此这可能对您没有用:
def flipper(event):
print("label text:", event.widget.cget("text"))
使用自定义小部件名称
您还可以为小部件命名。您无法准确取回名称,但可以非常接近。例如,如果您创建这样的标签:
switcher = Label(main, name="switcher", bg='white', text="click here", font="-weight bold")
您可以通过拆分“.”来获取小部件的字符串表示形式。并取最后一个值:
def flipper(event):
print("widget name:", str(event.widget).split(".")[-1])
通过绑定(bind)传递名称
最后,您可以设置绑定(bind),以便将名称发送到函数:
switcher.bind("", lambda event: flipper(event, "switcher"))
switcher1.bind("", lambda event: flipper(event, "switcher1"))
Tôi là một lập trình viên xuất sắc, rất giỏi!