_tkinter.TclError:无法打开" sample.gif":没有这样的文件或目录

时间:2018-01-23 19:48:55

标签: python python-3.x tkinter

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":没有这样的文件或目录

你能告诉我原因是什么吗?

1 个答案:

答案 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']

        ...