sid*_*cal 2 python tkinter widget python-3.x
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("<Button-1>", flipper)
switcher1 = Label(main, bg='white', text="click here", font="-weight bold")
switcher1.grid()
switcher1.bind("<Button-1>", flipper)
switcher2 = Label(main, bg='white', text="click here", font="-weight bold")
switcher2.grid()
switcher2.bind("<Button-1>", flipper)
switcher3 = Label(main, bg='white', text="click here", font="-weight bold")
switcher3.grid()
switcher3.bind("<Button-1>", flipper)
switcher4 = Label(main, bg='white', text="click here", font="-weight bold")
switcher4.grid()
switcher4.bind("<Button-1>", flipper)
switcher5 = Label(main, bg='white', text="click here", font="-weight bold")
switcher5.grid()
switcher5.bind("<Button-1>", flipper)
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
在我的事件函数中,我想根据点击的标签做不同的事情.我所知道的是,我只能获取被点击的小部件的标识号,而不是名称.如果我能获得所有小部件的标识符,那么我可以这样做:
def flipper(event):
if event.widget == switcher.identifier():
do stuff
Run Code Online (Sandbox Code Playgroud)
但我无法找到如何获取指定小部件的ID ...
如何通过其标识符(event.widget())获取窗口小部件的名称?
或者如何获取指定小部件名称的标识符?
如果两者都不可能,那么我必须为每个标签创建一个不同的函数并绑定,这是很多希望不需要的工作.
编辑:
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("<Button-1>", flipper)
switcher.widget = 's1'
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
Bry*_*ley 11
您无法获取窗口小部件所分配的变量名称,这将是相对无用的.可以将窗口小部件分配给多个变量,或者根本不分配.
您可以访问实际的窗口小部件,您可以使用它来获取标签上的文本.您的示例显示所有标签都相同,因此这可能对您没有用:
def flipper(event):
print("label text:", event.widget.cget("text"))
Run Code Online (Sandbox Code Playgroud)
您还可以为窗口小部件命名.你不能准确地回到名字,但你可以非常接近.例如,如果您创建这样的标签:
switcher = Label(main, name="switcher", bg='white', text="click here", font="-weight bold")
Run Code Online (Sandbox Code Playgroud)
您可以通过拆分"."来获取窗口小部件的字符串表示形式.并取最后一个值:
def flipper(event):
print("widget name:", str(event.widget).split(".")[-1])
Run Code Online (Sandbox Code Playgroud)
最后,您可以设置绑定,以便将名称发送到函数:
switcher.bind("<Button-1>", lambda event: flipper(event, "switcher"))
switcher1.bind("<Button-1>", lambda event: flipper(event, "switcher1"))
Run Code Online (Sandbox Code Playgroud)
您可以使用event.widget
从单击的小部件获取标准参数
例子:
import tkinter as tk
def callback(event):
print(event.widget['text'])
main = tk.Tk()
switcher = tk.Label(main, text="click here")
switcher.grid()
switcher.bind("<Button-1>", callback)
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
您可以将自己的变量分配给小部件
switcher.extra = "Hello"
Run Code Online (Sandbox Code Playgroud)
然后得到它
event.widget.extra
Run Code Online (Sandbox Code Playgroud)
例子:
import tkinter as tk
def callback(event):
print(event.widget['text'])
print(event.widget.extra)
main = tk.Tk()
switcher = tk.Label(main, text="click here")
switcher.grid()
switcher.bind("<Button-1>", callback)
switcher.extra = "Hello"
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
您可以使用lambda
参数绑定函数
bind("<Button-1>", lambda event:callback(event, "Hello"))
Run Code Online (Sandbox Code Playgroud)
例子:
import tkinter as tk
def callback(event, extra):
print(event.widget['text'])
print(extra)
main = tk.Tk()
switcher = tk.Label(main, text="click here")
switcher.grid()
switcher.bind("<Button-1>", lambda event:callback(event, "Hello"))
main.mainloop()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6837 次 |
最近记录: |