Python 如何使用循环生成多个按钮?

Python 如何使用循环生成多个按钮?,python,for-loop,tkinter,Python,For Loop,Tkinter,我已经编写了显示“tuile”的软件 tuile的定义: tuile是一个包含按钮的框架,该按钮显示图像和解释性文本 我想用3种不同的设置显示3个tuiles listes_icones = ["icone1.png","icone2.png","icone3.png"] listes_relx = [".3",".4",".5"] listes_text = ["S

我已经编写了显示“tuile”的软件

tuile的定义:

tuile是一个包含按钮的框架,该按钮显示图像和解释性文本

我想用3种不同的设置显示3个tuiles

listes_icones = ["icone1.png","icone2.png","icone3.png"]
listes_relx = [".3",".4",".5"]
listes_text = ["SYSTEM", "USER", "GAME"]

for i in range(3):

    gen_img = PhotoImage(file=listes_icones[i])
    gen_cadre = Frame(home,width=100, height=100,bg=bg_root)
    gen_cadre.place(anchor="c", relx=listes_relx[i], rely=.5)

    gen_img_bouton = Button(gen_cadre, image=gen_img, relief="flat",bg=bg_root)
    gen_img_bouton.pack()

    gen_text = Label(gen_cadre, text=listes_text[i], bg=bg_root, fg=text_color,font="blocktastic 18")
    gen_text.pack()

我设法显示文本,但不显示按钮和图像,变量被覆盖。如何解决这个问题?

您面临的问题就像您所说的,变量在循环中被覆盖。要解决这个问题,您需要跟踪生成的图像。一个简单的解决方案是将它们存储在一个列表中,并在下一步获取它们。这里有一个例子:

import tkinter as tk
import PIL

listes_icones = ["icone1.png","icone2.png","icone3.png"]
gen_icons = []
listes_relx = [".3",".4",".5"]
listes_text = ["SYSTEM", "USER", "GAME"]

home = tk.Tk()



for i in range(3):
    gen_img = tk.PhotoImage(file=listes_icones[i])
    gen_icons.append(gen_img)
    gen_cadre = tk.Frame(home,width=100, height=100)
    gen_cadre.place(anchor="c", relx=listes_relx[i], rely=.5)

    gen_img_bouton = tk.Button(gen_cadre, image=gen_icons[i], relief="flat")
    gen_img_bouton.pack()

    gen_text = tk.Label(gen_cadre, text=listes_text[i], font="blocktastic 18")
    gen_text.pack()

home.mainloop()

这回答了你的问题吗?若你们在函数中运行它,那个么你们可能会遇到PhotoImage中的bug问题,当它被分配给局部变量时,它会从内存中删除图像,然后你们只能看到空的地方。您需要将图像分配到全局变量或某个对象,即
gen\u img\u bouton.photo=gen\u img
@furas似乎是我的错误,因此我提供了一个答案。非常感谢!不客气,你好!我们可以为生成的每个按钮添加一个命令吗?gen\u img\u bouton.命令(Myfunction)?是的,我们可以!。如果你有兴趣了解lambda的话,看看这个链接,我在这里写了这个答案