【发布时间】: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 与文件夹 Images 和 Modules 处于同一级别。请注意,当我加载PhotoImage 时,我使用"Images/file.png",好像Images 在Modules 内,但奇怪的是按钮显示异常。 Python 确实找到了它们,但如果我删除错误,它们将不会显示。
或者是cmdBar 是没有显示的那个吗?包含按钮的框架。它们就是它的全部。
【问题讨论】:
-
根据您的描述没有明显错误。请提供可运行的minimal reproducible example。也就是说,在我看来,它可能类似于Why does Tkinter image not show up if created in a function?。
标签: python image tkinter button frame