【问题标题】:Issue with adding images to button in tkinter application在 tkinter 应用程序中将图像添加到按钮的问题
【发布时间】:2019-03-04 22:52:12
【问题描述】:

我正在帮助一个小项目,我们要在其中添加和从商店中取出商品。代码如下:

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

当您单击输入新产品按钮时,这会将您带到一个新屏幕。屏幕上应该是一张鸡蛋的照片,下面有一个计数。由于某种原因,鸡蛋的图像没有显示,按钮也不会点击。

如果我将eggButton 从图像更改为:

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

这似乎允许我单击变量并增加它。关于我们哪里/哪里出了问题的任何想法?我知道路径是正确的,因为我可以获得在Label 中显示鸡蛋图片的按钮。

【问题讨论】:

  • 运行的时候有没有报错?如果有,是什么?
  • 没有错误,一切正常,只是不显示图像。

标签: python image button tkinter


【解决方案1】:

问题是因为PhotoImage 被存储在一个名为egg 的变量中,该变量是newItemGUI() 函数的本地变量,所以当函数返回时它(和相关的图像对象)被删除。这是一个相当普遍的问题,因此您的问题可能与另一个问题重复(并且可能会被关闭)。

PhotoImagedocumentation 提到要避免此潜在问题,方法是在下面接近结尾的注意中显示。

无论如何,为防止这种情况发生,您可以将值存储在其他位置,例如 Toplevel 窗口的属性中。我还建议将其名称更改为更具描述性的名称,例如 egg_image

以下是对代码的更改,展示了如何完成:

    itemWindow.egg_image = PhotoImage(file="images/egg.gif")
    eggButton = Button(itemWindow, image=itemWindow.egg_image, command = addEgg)

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 2021-04-06
    • 2023-01-01
    • 1970-01-01
    • 2021-07-18
    • 2019-01-20
    • 2020-08-24
    相关资源
    最近更新 更多