Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我试图批量创建按钮,但命令函数没有';我不想工作_Python_Variables_Tkinter - Fatal编程技术网

Python 我试图批量创建按钮,但命令函数没有';我不想工作

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”

我想通过使用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”],列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()对我来说更容易理解,所以我会坚持下去