Проблема с добавлением изображений к кнопке в приложении tkinter - PullRequest
0 голосов
/ 05 марта 2019

Я помогаю с небольшим проектом, где мы хотим добавить и забрать товары из магазина.Код ниже:

from tkinter import *
import tkinter

####################
# Variables
eggs = 0
milk = 0
butter = 0
lemon = 0
guiSize = "800x1280"

def newItemGUI():
    main.withdraw()

    def addEgg():
        global eggs
        eggs += 1
        updateLabels()

    def menu():
        global eggs
        update(eggs)
        itemWindow.destroy()
        main.deiconify()

    def updateLabels():
        eggLabel = Label(itemWindow, text = eggs)
        eggLabel.grid(row = 3,column = 0)

    itemWindow = Toplevel()
    itemWindow.geometry(guiSize)
    itemWindow.title("Add a new item")
    itemWindow.configure(background = "#a1dbcd")

    heading = Label(itemWindow, text="Add new items", font=("Arial",20),background = "#a1dbcd")
    heading.grid(row=0, columnspan = 3)

    egg = PhotoImage(file ="images/egg.gif")
    eggButton = Button(itemWindow, image = egg, command = addEgg)
    eggButton.grid(row = 2, column = 0,padx = 10, pady = 10)
    eggLabel = Label(itemWindow, text = eggs).grid(row = 3,column = 0)

    back = Button(itemWindow, text = "Main Menu", command = menu, width = 15)
    back.grid(row = 4, column = 0, padx = 20, pady = 20)

def update(eggs):

    items.delete("1.0",END)
    items.insert(END,"Eggs \t:")
    items.insert(END,eggs)
    items.insert(END,"\n")

main=tkinter.Tk()
main.geometry(guiSize)
bgColour = "#DDA0DD"
main.configure(background = bgColour)

button1 = Button(main, text="Input new products", width = 20, height = 5, command = newItemGUI)
button1.grid(column = 1, row =2, padx = 20, pady = 20)
label2 = Label(main,text = "Items in the fridge :", font =("Arial,20"), background = bgColour)
label2.grid(row=4, columnspan = 2)
items = Text(main, width = 60, height = 10)

items.insert(END,"Eggs \t:")
items.insert(END,eggs)
items.insert(END,"\n")
items.grid(row=5, columnspan = 4)

main.mainloop()

no image displayed

Когда вы нажимаете на кнопку ввода новых продуктов, вы переходите на новый экран.На экране должно быть фото яйца с подсчетом внизу.По какой-то причине изображение яйца не отображается, и кнопка не щелкает.

Если я изменю eggButton с изображения на:

eggButton = Button(itemWindow, text = "egg", command = addEgg)

button working with text

это, кажется, позволяет мне щелкнуть и переменную, и она увеличивается.Любая идея относительно того, что / где мы ошиблись?Я знаю, что путь правильный, так как я могу получить кнопку для отображения изображения яйца в Label.

1 Ответ

0 голосов
/ 05 марта 2019

Проблема в том, что PhotoImage хранится в переменной с именем egg, которая является локальной для функции newItemGUI(), поэтому он (и связанный объект изображения) удаляются при возврате функции.Это довольно распространенная проблема, поэтому ваш вопрос, вероятно, является дубликатом другого (и может быть закрыт).

В этой PhotoImage документации упоминается, как избежать этой потенциальной проблемы, как показано ниже в Примечание ближе к концу.

Независимо от того, чтобы этого не произошло, вы можете сохранить значение где-то еще, например, в атрибуте окна Toplevel.Я также рекомендовал бы изменить его имя на что-то более описательное, например egg_image.

Вот изменения в вашем коде, показывающие, как это можно сделать:

    itemWindow.egg_image = PhotoImage(file="images/egg.gif")
    eggButton = Button(itemWindow, image=itemWindow.egg_image, command = addEgg)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...