【问题标题】:Python Tkinter Set image another windowPython Tkinter 设置图像另一个窗口
【发布时间】:2023-11-06 22:45:01
【问题描述】:

您好,我在设置背景图像时遇到问题,我想在 tkinter (python) 的另一个窗口中设置图像 看看 def matus()

现在有人可以帮助我吗..

这是另一个窗口的功能...

def matus():
matus = Tk()
matus.title("Nice WIndow")
matus.geometry("400x400")
canvas=Canvas(matus, width = 400, height = 400)

image=ImageTk.PhotoImage(Image.open("fotky/images.jpg"))

canvas.create_image(0,0,anchor=NW,image=image)

canvas.pack()

【问题讨论】:

标签: python python-3.x tkinter


【解决方案1】:

PhotoImage 中有一个错误,当图像被分配给函数中的局部变量时,它会从内存中删除图像。参见文档PhotoImage中的Note

你必须将它分配给全局变量

def matus():
    global image

    image = ImageTk.PhotoImage(Image.open("image.jpg"))

或者到某个类中的变量

def matus():
    matus = tk.Toplevel()

    image = ImageTk.PhotoImage(Image.open("image.jpg"))
    matus.image = image

import tkinter as tk
from PIL import ImageTk, Image

# --- functions ---

def matus():

    matus = tk.Toplevel()

    image = Image.open("image.jpg")
    w, h = image.size

    photo = ImageTk.PhotoImage(image)
    matus.photo = photo  # solution for bug in `PhotoImage`

    canvas = tk.Canvas(matus, width=w, height=h)
    canvas.pack()

    canvas.create_image(0, 0, anchor='nw', image=photo)

# --- main ---

root = tk.Tk()

button = tk.Button(root, text='IMAGE', command=matus)
button.pack()

root.mainloop()

【讨论】: