Tkinter按钮是否必须以变量作为名称?
Tkinter按钮是否必须以变量作为名称?
其实完全没必要给每个按钮都单独起变量名哦!你遇到的核心问题是如何在需要的时候访问这些按钮,而不是必须得有变量名才能创建按钮。
你第一种写法给按钮赋值了button1变量,这样后续确实能直接通过这个变量名来操作它,比如获取文本、修改状态之类的,代码是这样的:
button1 = ttk.Button(root, text = "Button 1", command=lambda: button_click(button1))
而第二种循环里的写法,你没有把按钮赋值给单独变量,但这不代表按钮没法访问。你可以换个思路,把批量创建的按钮存到一个列表里,这样就能通过索引来操作任意按钮了,比如:
import tkinter as tk root = tk.Tk() buttons = [] def button_click(index): # 通过列表索引获取按钮对象,再获取文本 button_text = buttons[index].cget('text') print(f"点击了:{button_text}") for i in range(3): btn = tk.Button(root, text=f"Button {i}", command=lambda x=i: button_click(x)) btn.pack() buttons.append(btn) root.mainloop()
这样之后,不管你想访问哪个按钮,直接用buttons[索引]就能拿到它的对象,进而做各种操作。
另外,你也可以直接把按钮对象传给点击函数,这样在函数里就能直接操作按钮了,比如:
import tkinter as tk root = tk.Tk() def button_click(btn): button_text = btn.cget('text') print(f"点击了:{button_text}") # 还能直接修改按钮属性,比如改文本 btn.config(text=f"已点击{button_text}") for i in range(3): btn = tk.Button(root, text=f"Button {i}") # 这里注意lambda要绑定当前的btn对象 btn.config(command=lambda current_btn=btn: button_click(current_btn)) btn.pack() root.mainloop()
总的来说,Tkinter按钮完全不需要必须用变量作为名称,变量只是方便你后续引用按钮的一种方式。如果是批量创建按钮,用列表或字典存储它们,一样能轻松访问和操作每个按钮~
备注:内容来源于stack exchange,提问作者Pedroski
相关产品推荐
相关产品推荐

