为什么我不能在 tkinter Toplevel() window 中显示图像?

Why can't I display an Image in a tkinter Toplevel() window?

我正在尝试创建一个 python 程序 tkinter,按下按钮后,会打开一个新的全屏 tkinter window,其中包含一个图像并播放一个音频文件 - 这是我的代码:

from tkinter import *
from PIL import Image, ImageTk
from playsound import playsound

def play():
    window = Toplevel()
    window.attributes('-fullscreen', True)
    img = ImageTk.PhotoImage(Image.open("pic.png"))
    label = Label(window, image=img).pack()
    playsound("song.mp3")
    
buttonWindow = Tk()
b = Button(buttonWindow, text="Press Button", command=play)
b.pack()

(我的图像和音频文件都在我的 python 文件的桌面上)

但是,当我 运行 我的代码按下按钮时,音频播放但没有第二个 tkinter window 打开。

我试过 destroy() buttonWindow 并尝试了很多不同的方法在 tkinter 上包含图像 window - 如果我使用 PhotoImage() 删除代码行,window 出现(显然我随后收到语法错误,指出 'img' 未定义)。

我该如何解决这个问题?

谢谢, 路易斯

您的 playsound() 命令正在阻止执行。 playsound() 命令有一个可选字段 'block',默认情况下为 True。将其更改为 False 将继续执行并允许 mainloop() 继续。

其次,只需调用 label.draw() 即可将您的图像绘制到 TopLevel window。

代码如下:

from tkinter import *
from PIL import Image, ImageTk
from playsound import playsound

def play():
    window = Toplevel()
    window.attributes('-fullscreen', True)
    img = ImageTk.PhotoImage(Image.open("pic.jpeg"))
    label = Label(window, image=img).pack()
    playsound("song.mp3",block=False)
    label.draw()
    
buttonWindow = Tk()
b = Button(buttonWindow, text="Press Button", command=play)
b.pack()
buttonWindow.mainloop()

干杯!