我想从列表中创建按钮,我希望它们拥有自己的图像。 我试过这个,但只有最后创建的按钮工作。
liste_boutton = ['3DS','DS','GB']
for num,button_name in enumerate(liste_boutton):
button = Button(type_frame)
button['bg'] = "grey72"
photo = PhotoImage(file=".\dbinb\img\\{}.png".format(button_name))
button.config(image=photo, width="180", height="50")
button.grid(row=num, column=0, pady=5, padx=8)
答案 0 :(得分:0)
您的代码显示正常,但您需要保留图像effbot的参考,我也相信PhotoImage只能读取GIF and PGM/PPM images from files,所以您需要另一个库PIL似乎是一个好的选择。我使用谷歌搜索图像中的几个图像,它们被放在与我的.py文件相同的目录中,所以我稍微更改了代码。如果不小心,按钮的宽度和高度也可以切掉部分图像。
from Tkinter import *
from PIL import Image, ImageTk
type_frame = Tk()
liste_boutton = ['3DS','DS','GB']
for num,button_name in enumerate(liste_boutton):
button = Button(type_frame)
button['bg'] = "grey72"
# this example works, if .py and images in same directory
image = Image.open("{}.png".format(button_name))
image = image.resize((180, 100), Image.ANTIALIAS) # resize the image to ratio needed, but there are better ways
photo = ImageTk.PhotoImage(image) # to support png, etc image files
button.image = photo # save reference
button.config(image=photo, width="180", height="100")
# be sure to check the width and height of the images, so there is no cut off
button.grid(row=num, column=0, pady=5, padx=8)
mainloop()
答案 1 :(得分:0)
只有最后一个按钮才有图像,因为它是唯一一个在全局范围内引用的图像,或者在特定情况下的任何范围内。按原样,您只有一个可参考的按钮和图像对象,即button
和photo
。
简短的回答是:
photo = list()
for...
photo.append(PhotoImage(file=".\dbinb\img\\{}.png".format(button_name)))
但是这仍然会有不好的做法。
答案 2 :(得分:0)
有了你的所有评论,我就能达到我的预期! 谢谢 !我是编程的新手,所以这不一定是最好的解决方案,但它可以工作
import tkinter as tk
root = tk.Tk()
frame1 = tk.Frame(root)
frame1.pack(side=tk.TOP, fill=tk.X)
liste_boutton = ['3DS','DS','GB']
button = list()
photo = list()
for num,button_name in enumerate(liste_boutton):
button.append(tk.Button(frame1))
photo.append(tk.PhotoImage(file=".\dbinb\img\\{}.png".format(button_name)))
button[-1].config(bg="grey72",image=photo[-1], width="180", height="50")
button[-1].grid(row=num,column=0)
root.mainloop()