为什么我不能在 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()
干杯!
我正在尝试创建一个 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()
干杯!