#python #loops #tkinter
#python #циклы #tkinter
Вопрос:
for i in champs:
img = tkinter.PhotoImage(file = r"D:Στοιχεια Ληψης{}.png".format(i))
l1 = tkinter.Label(text=i,bg=bgcolour,fg="White",font = (("Courier", 15)))
l1.place(x= xaxes,y=270)
xaxes = xaxes 200
button = tkinter.Button(bg=bgcolour,text=i ,image =img, bd="0",
activebackground = "#00003f", height = "200", width = "200")
button.place(x = x1, y = 60)
x1 = x1 100
Champs — это список, содержащий некоторые имена
Когда я запускаю код в своем окне, я получаю только последнюю кнопку (изображение)
Почему это?
Я пытаюсь создать цикл, в котором некоторые кнопки будут располагаться рядом друг с другом
Комментарии:
1. Вам нужно сохранить ссылку. effbot.org/tkinterbook/photoimage.htm
2. Изображения собираются как мусор, даже когда используются в ярлыке. Сохраните их в некотором списке, который остается в области видимости.
3. использование
after
функции действительно поможет.4. Попробуйте
button.image = img
?5. Существует известная проблема с изображениями tkinter, когда они удаляются («собирается мусор») после запуска — вам нужно сохранить ссылку на ваши разные изображения, например, в списке или словаре, а затем получить доступ к изображению через этот список / словарь
Ответ №1:
Ваши изображения собираются мусором. Вот решение.
import ntpath
import tkinter as tk
from PIL import Image, ImageTk
root = tk.Tk()
root.geometry("800x600")
#for storing image references
images = dict()
#list of your image paths
pathlist = ['D:image1.png', 'D:image2.png']
#load paths and save references
for path in pathlist:
name = ntpath.basename(path).split('.')[0]
images[name] = ImageTk.PhotoImage(Image.open(path), name=name)
#you can assign an image with just the name
labela = tk.Label(root, image='image1')
labela.grid()
#or directly through the images reference
labelb = tk.Label(root, image=images['image2'])
labelb.grid()
root.mainloop()