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



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

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 窗口。

我试图破坏((按钮窗口,并尝试了许多不同的方法在tkinter窗口中包含图像 - 如果我使用PhotoImage((删除代码行,则会出现窗口(显然我随后得到一个语法错误,指出"img"未定义(。

我该如何解决这个问题?

谢谢 路易斯

我也有类似的问题。 但是我解决了这种试错法。 首先,我不使用枕头库并将图像放入标签中 您应该尝试定义照片图像对象不在函数中 例: 它将工作:

import tkinter as tk
root = tk.Tk()
root.geometry("600x400")
def popUp():
popff = tk.Toplevel(root)
popff.geometry("400x200")
labelImgff = tk.Label(popff, image=imgff, bg="white")
labelImgff.grid(row=0, column=0)
imgff = tk.PhotoImage(file="/home/user/image.png")
btnff = tk.Button(text="startPOP", command=popUp)
btnff.grid(column=0,row=0)
root.mainloop()

作用效果

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

其次,只需调用 label.draw(( 即可将图像绘制到 TopLevel 窗口。

代码如下:

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()

干杯!

最新更新