【问题标题】:Button with image only shows if there *is* an error带有图像的按钮仅在*存在*错误时显示
【发布时间】:2021-05-08 06:19:30
【问题描述】:

我已经尝试自己解决这个问题好几个小时了,但我一直没能做到。如果这个问题已经发布,请告诉我在哪里可以找到它,因为我找不到。我会尽力解释自己并包含代码的某些部分,但我无法展示整个代码。它现在相当广泛(在西班牙语中,我在拉丁美洲)。

我在 Tk 窗口上有一个框架。框架被细分为框架以分发 UI。其中一个框架有一些带有图像而不是文本的按钮。

问题是按钮只有在我打包后出现异常时才会出现。这是相关代码

imgClose = PhotoImage(file="Images/close.png")
close = Button(cmdBar, image=imgClose, borderwidth=0, highlightthickness=0, cursor="hand2", command=lambda: defClose())
close.config(width=32, height=32)
close.pack(side=RIGHT)

imgSave = PhotoImage(file="Images/save.png")
save = Button(cmdBar, image=imgSave, borderwidth=0, highlightthickness=0, cursor="hand2", command=lambda: defSave())
save.config(width=32, height=32)
save.pack(side=RIGHT)

print(ThisVarDoesNotExist) #<-- Only if there is an error the buttons show on screen

如果我离开最后一个print(),按钮会显示在屏幕上,但会引发异常。如果我删除或评论print(),也不例外,但按钮不会出现。

包含按钮的框架使用grid() 放置,并且所有内容都位于从Frame 继承的类中。

class MyClass(Frame):

这个类被创建并放置在一个 Tk 窗口的框架中。

一切都出现在屏幕上应有的位置,但这些按钮需要出现错误。其他框架上也有图像的其他按钮出现并且工作正常。

也许值得一提的是,Tk 主窗口位于项目根目录中。我显示的帧位于名为Modules 的子目录(子文件夹)中。图像位于它们自己的图像文件夹中。目录结构如下(考虑main.py有Tk窗口):

Images
    save.png
    close.png
Modules
    myClass.py
main.py

文件 main.py 与文件夹 ImagesModules 处于同一级别。请注意,当我加载PhotoImage 时,我使用"Images/file.png",好像ImagesModules 内,但奇怪的是按钮显示异常。 Python 确实找到了它们,但如果我删除错误,它们将不会显示。

或者是cmdBar 是没有显示的那个吗?包含按钮的框架。它们就是它的全部。

【问题讨论】:

标签: python image tkinter button frame


【解决方案1】:

早些时候我遇到了同样的错误,无法弄清楚,但我终于解决了这个问题。 在这一行之后,

....

save = Button(cmdBar, image=imgSave, borderwidth=0, highlightthickness=0, cursor="hand2", command=lambda: defSave())

....

添加,

save.image = imgSave 

这会将照片存储为参考,并且不会在课程结束后立即消失

希望成功!

【讨论】:

  • 成功了。我是 Python 新手,主要使用 .NET、PHP 等,这是我第一次遇到这样的事情。在构造函数中添加了带有图像的属性,然后必须将其重新分配为属性?没有意义,但是,如果有效的话……
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 2018-03-16
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多