簡體   English   中英

為什么我不能在 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' 未定義)。

我該如何解決這個問題?

謝謝,路易斯

我有類似的問題。 但我解決了這個試錯法。 首先,我不使用枕頭庫並將圖像放入 Label 您應該嘗試定義 Photoimage object NOT IN FUNCTION 示例:它將起作用:

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

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM