【问题标题】:Unable to display image label in second Tkinter frame无法在第二个 Tkinter 帧中显示图像标签
【发布时间】:2020-04-12 17:49:34
【问题描述】:

我正在尝试使用 Tkinter 构建一个简单的 gui。该应用程序涉及一个较小的辅助框架,在按下按钮时会在主框架之上打开。此辅助帧必须包含图像。图像标签很容易出现在主框架上,但在辅助框架上,图像标签显示为一个与图像大小相同的空框,具有我设置的任何背景颜色。

这是我的做法:

#send diagram page
def send_diagram():
    send_diagram_frame=tk.Frame(frame, bg="#D4BAEC")
    send_diagram_frame.place(relx=0.5, rely=0.5, relheight=0.7, relwidth=0.7, anchor="center")

    send_diagram_entry_working_image=Image.open('/home/raghav/RemEdi/design/assets/generic_page_entry.png')
    send_diagram_entry_image=ImageTk.PhotoImage(send_diagram_entry_working_image)
    send_diagram_entry_label=tk.Label(send_diagram_frame, image=send_diagram_entry_image)
    send_diagram_entry_label.place(relx=0.5, rely=0.5, anchor="center")
    return

可见,send_diagram() 是按钮的命令。

我尝试在辅助框架内添加另一个较小的框架来包含图像,但这也不起作用。

任何帮助都会非常有帮助。谢谢!

【问题讨论】:

    标签: python-3.x user-interface tkinter


    【解决方案1】:

    您正在函数内创建新图像,并使用它自己的本地命名空间。当函数结束时,对图像的引用将被垃圾收集。

    您可以通过在标签小部件中保存对图像的引用来解决此问题。将这一行放在创建图像后的函数中:

    send_diagram_entry_label.image = send_diagram_entry_image
    

    【讨论】:

    • 我明白你在说什么,你的回答让一切正常!非常感谢!
    【解决方案2】:

    这是工作代码。我已经尝试过了,它对我有用。

    def make_label_image(parent, img):
        label = tk.Label(parent, image=img)
        label.place(relx=0.5, rely=0.5, anchor="center")
    
    def send_diagram():
        send_diagram_fram = tk.Frame(frame, bg="#D4BAEC")
        send_diagram_frame.place(relx=0.5, rely=0.5, relheight=0.7, relwidth=0.7, anchor="center")
        send_diagram_fram.pack_propagate(0)    
        send_diagram_fram.pack()
        img = ImageTk.PhotoImage(Image.open('C:/Users/xxxx/Desktop/logo.jpg')) 
        make_label_image(send_diagram_fram, img)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-19
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 2017-10-14
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多