tkinter有一个非常奇怪的问题。
我通常可以在tkinter上显示图像。 但是,如果我尝试加载音乐文件,我就无法在其上显示任何图像。
例如,
import tkinter as Tk
class Frame(Tk.Frame):
def __init__(self, master=None):
Tk.Frame.__init__(self, master)
self.f = Tk.Frame(self)
self.f.pack()
self.ARTWORK = ['guthrie.gif']
self.f_artwork = Tk.Frame(self.f)
self.f_artwork.pack()
self.artwork_img = Tk.PhotoImage(file=self.ARTWORK[0])
self.artwork_la = Tk.Label(self.f_artwork, image=self.artwork_img)
self.artwork_la.pack()
if __name__ == '__main__':
f = Frame()
f.pack()
f.mainloop()
我可以在这种情况下显示图像,但
import tkinter as Tk
import os
from tkinter.filedialog import askdirectory
import pygame
song_list = []
directory = askdirectory()
os.chdir(directory)
for file in os.listdir(directory):
if file.endswith('.mp3'):
realdir = os.path.realpath(file)
song_list.append(file)
pygame.mixer.init()
pygame.mixer.music.load(song_list[0])
pygame.mixer.music.play()
pygame.mixer.init()
pygame.mixer.music.load(song_list[0])
pygame.mixer.music.play()
class Frame(Tk.Frame):
def __init__(self, master=None):
Tk.Frame.__init__(self, master)
self.f = Tk.Frame(self)
self.f.pack()
self.ARTWORK = ['guthrie.gif']
self.f_artwork = Tk.Frame(self.f)
self.f_artwork.pack()
self.artwork_img = Tk.PhotoImage(file=self.ARTWORK[0])
self.artwork_la = Tk.Label(self.f_artwork, image=self.artwork_img)
self.artwork_la.pack()
if __name__ == '__maim__':
f = Frame()
f.pack()
f.mainloop()
对于这个程序,我无法在Tkinter上显示图像。 Tkinter无法识别文件。 错误信息是 _tkinter.TclError:无法打开" guthrie.gif":没有这样的文件或目录
你能告诉我原因是什么吗?
答案 0 :(得分:1)
运行os.chdir(directory)
后,您更改了运行脚本的目录。如果要保留旧功能,可以使用os.getcwd()
捕获并保存脚本directroy。尝试这样的事情。
import tkinter as Tk
import os
from tkinter.filedialog import askdirectory
import pygame
song_list = []
scriptDir = os.getcwd() # directory from where script was ran
directory = askdirectory()
os.chdir(directory)
for file in os.listdir(directory):
if file.endswith('.mp3'):
realdir = os.path.realpath(file)
song_list.append(file)
...
class Frame(Tk.Frame):
def __init__(self, master=None):
Tk.Frame.__init__(self, master)
self.f = Tk.Frame(self)
self.f.pack()
os.chdir(scriptDir) # change to the starting directory
self.ARTWORK = ['guthrie.gif']
...