我想创建许多按钮。因此,我创建了一个函数,并调用了此函数来创建一个按钮。按钮上有一个图像,所以我在调用函数时在参数上添加了图像的链接。
知道Tkinter Image的运行时错误,我使用了一个列表来保存Image链接。
问题在于它仅显示一个按钮。列表可能有问题吗?
from tkinter import *
app = Tk()
a = []
i = 0
def CreateButton (file, row):
global i
global ButtonCreationImg
global a
a.insert(i, file)
ButtonCreationImg = PhotoImage(file = a[i])
ButtonCreation = Button(app, image=ButtonCreationImg, border='0')
ButtonCreation.grid(row=row, column=0, columnspan=4, ipadx=0)
i += 1
CreateButton("bouton_1.png", 6)
CreateButton("bouton_2.png", 8)
app.mainloop()
答案 0 :(得分:0)
我希望问题在于PhotoImage
和Garbage Collector
中的错误,当在函数中创建PhotoImage
并将其分配给局部变量时,该错误会将Garbage Collector
从内存中删除-并由{ {1}}从功能退出时。
您可以在effbot.org上的Note
中阅读有关此问题的信息:PhotoImage
我使用button.img
将PhotoImage
分配给班级,以便将其保存在内存中。
我还对代码进行了其他更改,但是它们对于此问题并不重要。
import tkinter as tk
from PIL import ImageTk
# --- functions ---
def create_button(all_files, filename, row):
all_files.append(filename)
button_image = ImageTk.PhotoImage(file=all_files[-1])
button = tk.Button(app, image=button_image, border='0')
button.img = button_image # solution for bug with PhotoImage
button.grid(row=row, column=0, columnspan=4, ipadx=0)
# --- main ---
all_files = []
app = tk.Tk()
create_button(all_files, "bouton_1.png", 6)
create_button(all_files, "bouton_2.png", 8)
app.mainloop()