Python 我试图批量创建按钮,但命令函数没有';我不想工作
我想通过使用for循环和exec函数批量创建tkinter按钮,但是当我设置命令时,它会继续调用数据库中最后一个部分的函数 一楼i的Python 我试图批量创建按钮,但命令函数没有';我不想工作,python,variables,tkinter,Python,Variables,Tkinter,我想通过使用for循环和exec函数批量创建tkinter按钮,但是当我设置命令时,它会继续调用数据库中最后一个部分的函数 一楼i的: exec('room_u%d=CreateRoom(一楼[i][“name”])'%index) exec('lbl\%d=按钮(窗口,文本=首层[i][“名称”],命令=lambda:move(首层[i][“x”],首层[i][“y”]),bg=“浅灰色”)'%index) exec('lbl_u%d.grid(列=一楼[i][“x”],行=一楼[i][“y”
:
exec('room_u%d=CreateRoom(一楼[i][“name”])'%index)
exec('lbl\%d=按钮(窗口,文本=首层[i][“名称”],命令=lambda:move(首层[i][“x”],首层[i][“y”]),bg=“浅灰色”)'%index)
exec('lbl_u%d.grid(列=一楼[i][“x”],行=一楼[i][“y”],列span=一楼[i][“xspan”],行span=一楼[i][“yspan”])'%index)
如果一楼[i][“锁定”]==真:
exec('lbl_u%d.config(state=“disabled”,bg=“red”)'%index)
指数+=1
当我运行这段代码并单击某个按钮时,无论我按下哪个按钮,它都会一直转到同一个对象更改此选项:
command=lambda: move(FirstFloor[i]["x"]
为此:
command=lambda i=i: move(FirstFloor[i]["x"]
更改此项:
command=lambda: move(FirstFloor[i]["x"]
为此:
command=lambda i=i: move(FirstFloor[i]["x"]
您可以批量创建按钮,而无需
exec
。您可以使用列表、dict或tuple。我通常使用列表
通过使用列表,我们可以引用索引与按钮进行交互
例如:
import tkinter as tk
root = tk.Tk()
button_list = []
def do_something(some_value):
print(button_list[some_value]['text'])
for i in range(10):
button_list.append(tk.Button(root, text='Button {}'.format(i+1), command=lambda i=i: do_something(i)))
button_list[-1].grid(row=i, column=0)
root.mainloop()
您可以批量创建按钮,而无需
exec
。您可以使用列表、dict或tuple。我通常使用列表
通过使用列表,我们可以引用索引与按钮进行交互
例如:
import tkinter as tk
root = tk.Tk()
button_list = []
def do_something(some_value):
print(button_list[some_value]['text'])
for i in range(10):
button_list.append(tk.Button(root, text='Button {}'.format(i+1), command=lambda i=i: do_something(i)))
button_list[-1].grid(row=i, column=0)
root.mainloop()
您是否可以将您的代码粘贴到问题中,作为代码片段,而不是自由文本,这将使我们更易于阅读和解释。由于您要求帮助调试,值得一提的是,exec()使调试更加复杂(请参阅),因此,除非你真的必须使用它,否则不使用它可以节省你自己的时间/麻烦。我使用exec是因为我在一楼有30多个对象,它比写出所有变量节省了我很多时间。你真的不应该使用
exec
。这使得代码更难理解,也更难调试。只需使用字典或列表来存储所有按钮引用。没有理由使用exec()。在没有exec()
的情况下,这是100%可能做到的。您是否可以将您的代码作为代码片段粘贴到问题中,而不是自由文本,这将使我们更容易阅读和解释。由于您请求调试帮助,因此值得一提的是exec()使调试更加复杂(请参阅),因此,除非你真的必须使用它,否则不使用它可以节省你自己的时间/麻烦。我使用exec是因为我在一楼有30多个对象,它比写出所有变量节省了我很多时间。你真的不应该使用exec
。这使得代码更难理解,也更难调试。只需使用字典或列表来存储所有按钮引用。没有理由使用exec()。没有exec()
,这是100%可能做到的。谢谢你的帮助,但我认为exec()对我来说更容易理解,所以我会坚持下去。谢谢你的帮助,但我认为exec()对我来说更容易理解,所以我会坚持下去