我想将图像添加到 tkinter
中的顶框。它适用于 MainMenu
,但不适用于 SideMenu
。运行时,它应该在第一个菜单上显示_test.gif,当按下按钮时,打开第二个菜单并显示_test2.gif。目前,第二个菜单是空白的 - 无图像。
代码:
import tkinter as tk
class MainMenu(object):
def __init__(self):
self.launch_MainMenu()
def launch_MainMenu(self):
self._mainMenuWindow = tk.Tk()
self.imageGIF = tk.PhotoImage(file="_test.gif");
self.imageLabel = tk.Label(self._mainMenuWindow,image=self.imageGIF)
self.imageLabel.grid(row=0,column=1,padx=10,pady=10)
tk.Button(self._mainMenuWindow,text="Next Menu",
command=SideMenu).grid(row=0,column=2,padx=10)
tk.mainloop()
class SideMenu(object):
def __init__(self):
self.launch_sideMenu()
def launch_sideMenu(self):
self._sideWindow = tk.Toplevel()
self.imageGIF2 = tk.PhotoImage(file="_test2.gif")
self.imageLabel2 = tk.Label(self._sideWindow,image=self.imageGIF2)
self.imageLabel2.grid(row=0,column=1,padx=10,pady=10)
最佳答案
以下更改将使其正常工作。名为 add_sidemenu()
的新方法已添加到类 MainMenu
并用作 command=
的值参数传递给Button
小部件在创建时。
在新方法中,它创建并保存 SideMenu
实例。在您的代码中,该实例几乎在创建后就被删除,因为它没有存储在变量中。我也对 tk.PhotoImage
做了类似的事情实例——即使对于 MainMenu
中的实例来说这并不是绝对必要的因为tk.mainloop()
调用launch_MainMenu()
结尾防止它所在的局部变量过早超出范围(因此在仍然需要时不会将其删除)。无论如何,我还是这么做了,因为这通常是对 tkinter
中使用的所有图像执行此操作的一个很好的做法。 (人们不这样做是这里出现如此多相关问题的一个重要原因)。
我还尝试重新格式化您的代码,使其遵循 PEP 8 - Style Guide for Python Code接近一点了。我强烈建议您阅读并开始遵循中的指南——您的代码将更易于其他人(和您)阅读(以及简化调试和维护)。
import tkinter as tk
class MainMenu(object):
def __init__(self):
self.launch_MainMenu()
def launch_MainMenu(self):
self._mainMenuWindow = tk.Tk()
self.imageGIF = tk.PhotoImage(file="_test.gif");
imageLabel = tk.Label(self._mainMenuWindow, image=self.imageGIF)
imageLabel.grid(row=0, column=1, padx=10, pady=10)
tk.Button(self._mainMenuWindow, text="Next Menu",
command=self.add_sidemenu).grid(row=0, column=2, padx=10)
tk.mainloop()
def add_sidemenu(self):
self.sidemanu = SideMenu()
self.sidemanu.grid(row=0, column=2, padx=10)
class SideMenu(object):
def __init__(self):
self.launch_sideMenu()
def launch_sideMenu(self):
self._sideWindow = tk.Toplevel()
self.imageGIF2 = tk.PhotoImage(file="_test2.gif")
self.imageLabel2 = tk.Label(self._sideWindow, image=self.imageGIF2)
self.imageLabel2.grid(row=0, column=1, padx=10, pady=10)
mainMenu = MainMenu()
关于python - 将 tkinter 图像嵌入到顶层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217059/