无法将图像添加到 tkinter 中的类

Posted

技术标签:

【中文标题】无法将图像添加到 tkinter 中的类【英文标题】:Can't add image to a class in tkinter 【发布时间】:2022-01-18 03:32:49 【问题描述】:

我试图在一个类的 tkinter 的窗口中显示一个图像,但我无法让它工作,没有图像行它显示一个空窗口但是当我使用图像行执行代码时,我收到错误消息:'Img_window' object has no attribute 'tk'.

如何更改代码以显示图像?

代码如下:

from tkinter import *
from PIL import Image, ImageTk

class Img_window:
    def __init__(self):

        self.window = Tk()
        self.window.title("Image")
    
        image_open = Image.open("welcome.jpg")
        welcome_img = ImageTk.PhotoImage(image_open)

        image_label = Label(self, image = welcome_img)
        image_label.grid(row=1,columnspan=3)
    
        self.window.mainloop()

img_window = Img_window()

【问题讨论】:

你在说什么“线条”?我认为您的问题可能与Why does Tkinter image not show up if created in a function? 重复 错字。你有Label(self, ...),你需要Label(self.window, ...) 您不能使用非小部件作为小部件的父级。 self 不是小部件。 如果是子窗口,使用Toplevel()而不是Tk() 【参考方案1】:
import tkinter as tk   #Added this
from tkinter import *

from PIL import Image, ImageTk



class Img_window:
    def __init__(self):
        window = Tk() #Fixed
        window.title("Image") #Fixed
            
        image_open = Image.open("welcome.jpg")
        welcome_img = ImageTk.PhotoImage(image_open)

        image_label = Label(image = welcome_img) #fixed
        image_label.grid(row=1,columnspan=3)
            
        window.mainloop()

Img_window()

您的问题是在不应该使用 self 的地方使用 self 并且没有将 tkinter 作为 tk 导入

    image_label = Label(self, image = welcome_img)


    self.window = Tk()
    self.window.title("Image")

【讨论】:

我忘了告诉你添加:import tkinter as tk 完全不需要导入。他们在任何地方都没有提到tk 还建议显式指定小部件的父级。

以上是关于无法将图像添加到 tkinter 中的类的主要内容,如果未能解决你的问题,请参考以下文章

Python中tkinter控件中的Listbox控件详解

在单独的线程中运行 Tkinter 表单

Tkinter:将具有透明背景的图像添加到按钮

Tkinter 错误:无法识别图像文件中的数据

将matplotlib嵌入到tkinter应用程序中

将按键发送到嵌入式 Pygame