【问题标题】:Tkinter Image not displaying in label or canvasTkinter 图像未显示在标签或画布中
【发布时间】:2021-11-29 07:51:18
【问题描述】:

这是我实际创建这些标签或画布的代码:

class FrameBanner(tk.Frame):
    """

    """
    def __init__(self, root, color_black, color_yellow, width, height):

        # Initialize from parent
        super(FrameBanner, self).__init__(root)

        # # Left 1 Banner
        # self.banner_1 = tk.Canvas(master=self, width=width*0.8, height=height, bg=color_yellow)
        self.image_1 = ImageTk.PhotoImage(Image.open("images_2/logo_here.png").resize((round(width*0.7), round(height*0.9)), Image.NEAREST))
        # self.banner_1.create_image(10, 10, anchor="w", image=self.image_1)
        # self.banner_1.image = self.image_1
        self.banner_1 = tk.Label(master=self, image=self.image_1)
        self.banner_1.image = self.image_1

        # # Right 2 Banner
        # self.banner_2 = tk.Canvas(master=self, width=width*0.2, height=height, bg=color_black)
        self.image_2 = ImageTk.PhotoImage(Image.open("images_2/logo_here.png").resize((round(width*0.15), round(height*0.9)), Image.NEAREST))
        # self.banner_2.create_image(width*0.2, 10, anchor="w", image=self.image_2)
        # self.banner_2.image = self.image_IMS
        self.banner_2 = tk.Label(master=self, image=self.image_2)
        self.banner_2.image = self.image_2

        # Grid Layout
        self.banner_1.grid(column=0, row=0, sticky='w')
        self.banner_2.grid(column=1, row=0, sticky='e')

这是我调用它的代码:

        ## Banner
        self.frm_banner_height = height*0.2
        self.frm_banner = tk.Frame(master=self.frm_pregen, width=self.frm_pregen_width, height=self.frm_banner_height)
        self.FrameBanner = FrameBanner(self.frm_banner, color_black, color_yellow, self.frm_pregen_width, self.frm_banner_height)

我稍后再做:

self.frm_banner.grid(column=0, row=0)

这就是它的样子,我希望两个图像为空的角落:

image

有什么建议吗?

【问题讨论】:

  • 在不是该实例属性的初始化变量被垃圾回收之后(应该是self.image_STARself.image_IMSWhy does Tkinter image not show up if created in a function?
  • 这个我试过了,不是我也保存在self.banner_X.image中
  • 刚试了一遍还是不行。更新了问题代码,因此不再建议这样做。
  • 什么是self.frm_pregen?一个框架?
  • 你没有在self.FrameBanner上调用任何布局函数。

标签: python python-3.x tkinter tkinter-canvas tkinter-label


【解决方案1】:

这是因为你没有在self.FrameBanner上调用任何布局函数:

...
self.FrameBanner.pack() # or whatever layout manager you want
self.frm_banner.grid(column=0, row=0)
...

【讨论】:

  • 这成功了!谢谢!
  • 好吧,另一个问题是不会使这些图像成为实例的属性,但 OP 编辑​​了问题并更正了这个问题(不知道这是好是坏,但那将是问题(我认为))
  • Matiiss,我已经尝试过了,我也单独做了 self.banner_X.image。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 2013-05-26
  • 2022-01-10
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多