What I'm trying to do is to display the image cover from a flac file like in the pic below (this one is hard coded).
I ripped the cover with the function getCoverFlac
from my code, but the problem begins when I try to update this img with my imgSet
fucntion, the image to load exist(can see it in the dir and can even be used hard coded), but the image wont appear in the Ttkinter window. I believe its receiving the right file name since it returns the name correctly:
name of cover to display:Shikao Suga - Yuudachi ('99 NHK Hall 0 Live).flacCover.jpg
so how can I fix this? full code bellow:
import pygame import tkinter as tkr from tkinter.filedialog import askdirectory from tkinter import * import os from mutagen.flac import FLAC, Picture import os.path from PIL import ImageTk, Image music_player = tkr.Tk() cont = 0 music_player.title("My Music Player") music_player.geometry("600x600") play_list = tkr.Listbox(music_player, font="Helvetica 12 bold", bg='yellow', selectmode=tkr.SINGLE) pygame.init() pygame.mixer.init() def play(): pygame.mixer.music.load(play_list.get(tkr.ACTIVE)) #gets and set the var name var.set(play_list.get(tkr.ACTIVE)) #gets the cover and sets the the img that will be in panel getThecover = getCoverFlac(play_list.get(tkr.ACTIVE)) imgSet(getThecover) pygame.mixer.music.play() def stop(): pygame.mixer.music.stop() def pause(): pygame.mixer.music.pause() def unpause(): pygame.mixer.music.unpause() def selectDir(): directory = askdirectory() os.chdir(directory) song_list = os.listdir() for item in song_list: pos = 0 play_list.insert(pos, item) pos += 1 def getCoverFlac(flac_file): #this fucntion extracts the image from the flac file and saves it in the dir where the flac file is. flacObj = FLAC(flac_file) coverArt = flacObj.pictures coverName = str(flac_file)+"Cover.jpg" if os.path.isfile(coverName): print(coverName+" already exists") else: for img in coverArt: if img.type == 3: with open(coverName, "wb") as f: f.write(img.data) print(coverName+" created and saved") #img.show() return coverName def imgSet(var): #sets the global var "img" to var global img print("name of cover to display:"+var) resizeImg(var) img = ImageTk.PhotoImage(Image.open(var)) def resizeImg(imgName): basewidth = 300 img = Image.open(imgName) wpercent = (basewidth/float(img.size[0])) hsize = int((float(img.size[1])*float(wpercent))) img = img.resize((basewidth,hsize), Image.ANTIALIAS) img.save(imgName) Button1 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="PLAY", command=play, bg="blue", fg="white") Button2 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="STOP", command=stop, bg="red", fg="white") Button3 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="PAUSE", command=pause, bg="purple", fg="white") Button4 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="UNPAUSE", command=unpause, bg="orange", fg="white") Button5 = tkr.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="Music Dir", command=selectDir, bg="green", fg="white") var = tkr.StringVar() song_title = tkr.Label(music_player, font="Helvetica 12 bold", textvariable=var) resizeImg('Haddaway - What Is Love (70 Mix).flacCover.jpg') img = ImageTk.PhotoImage(Image.open('Haddaway - What Is Love (70 Mix).flacCover.jpg')) panel = tkr.Label(music_player, image = img, justify=CENTER) song_title.pack() panel.pack(fill="x") Button1.pack(fill="x") Button2.pack(fill="x") Button3.pack(fill="x") Button4.pack(fill="x") Button5.pack(fill="x") play_list.pack(fill="both", expand="yes") music_player.mainloop()
https://stackoverflow.com/questions/67410452/image-not-appearing-in-ttkinter-window May 06, 2021 at 08:39AM
没有评论:
发表评论