python - 无法在 tkinter 中显示图像
问题描述
我正在尝试让图像显示在 tkinter 画布中。
我知道Canvas
形状和文本的作品,但图像不起作用。
我正在使用PIL
ImageTK.PhotoImage
,但它也无法Tkinter.PhotoImage
使用“.ppm”图像创建。
'png'
图像存储在与 python 文件相同的目录中。
import tkinter as tk
from PIL import Image, ImageTk
class Window:
def __init__(self):
self.window = tk.Tk()
self.window.title("COMP")
self.window.geometry("1200x600")
topframe = tk.Frame(self.window, highlightbackground='black', highlightthickness=1)
topframe.pack(side='top')
self.noteview = NoteView(topframe, self.songString)
class NoteView:
def __init__(self, frame):
self.canvas = tk.Canvas(frame, width=60, height=200)
self.canvas.pack()
self.canvas.create_text(15, 190, text='hi')
im = Image.open('png.png')
self.image = ImageTk.PhotoImage(im)
self.canvas.create_image(20, 20, anchor='nw', image=self.image)
w = Window()
TypeError:“PhotoImage”对象不可调用
解决方案
问题是 tkinter 以某种方式将图像绑定到窗口,而不是您的情况。您应该使用self.canvas.image = ImageTk.PhotoImage(im)
和self.canvas.create_image(20, 20, anchor='nw', image=self.canvas.image)
。希望这会有所帮助!
推荐阅读
- postgresql - 包含/排除项目的父/子表
- java - spring boot调度在方法级别启用/禁用任务
- matlab - 如何在 matlab 中绘制 PD 补偿器的输出?
- sql - WHERE 子句中的动态日期取决于当前日期
- python - 将 ProcessPoolExecutor 分配给定义的 cpus 并使用队列进行通信
- c - 使用递归反转数组
- bash - bash:用于识别导致错误的特定别名的脚本
- spring - Spring获取接收到的正文的MediaType
- ios - Swift:暂停沿路径移动的动画?
- reporting-services - 如果我们有 2 个类别组名称,如何将类别组名称放在顶部和底部?