使用功能显示图像按钮

时间:2019-05-12 12:27:33

标签: python

我想创建许多按钮。因此,我创建了一个函数,并调用了此函数来创建一个按钮。按钮上有一个图像,所以我在调用函数时在参数上添加了图像的链接。

知道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()

1 个答案:

答案 0 :(得分:0)

我希望问题在于PhotoImageGarbage Collector中的错误,当在函数中创建PhotoImage并将其分配给局部变量时,该错误会将Garbage Collector从内存中删除-并由{ {1}}从功能退出时。

您可以在effbot.org上的Note中阅读有关此问题的信息:PhotoImage

我使用button.imgPhotoImage分配给班级,以便将其保存在内存中。

我还对代码进行了其他更改,但是它们对于此问题并不重要。

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()