我已经编写了一个功能,可以搜索文件夹并在新窗口中显示图片(如果文件存在)但我总是需要在功能可以工作之前添加图像文件格式或扩展名。
有没有办法可以解决忽略.gif
或.png
from tkinter import *
from PIL import *
def display_pix():
hmm = Toplevel(window)
hmm.geometry('300x300')
label = Label(hmm,)
label.pack()
PhotoImage( file = 'C:\\Python34\\' + e.get())
logo = PhotoImage( file = 'C:\\Python34\\' + e.get())
label.img = logo
label.config(image = label.img)
window = Tk()
e = Entry( window, width= 20)
b = Button( window, text = 'search',command = display_pix)
e.place(x = 50, y = 30)
b.place(x = 70, y = 50)
window.mainloop()
答案 0 :(得分:0)
如果文件名为spam.gif
,那就是它的文件名,因此您无法将其打开为spam
。 (是的,Windows资源管理器尝试向您隐藏此内容,但仅限于此范围内 - 如果您想要执行相同的操作,则必须执行与Windows资源管理器相同的操作。)
如果您希望用户能够键入spam
,并且您的程序要自动打开spam.gif
或spam.jpg
或spam.png
,则需要明确查找匹配您想要的模式的文件。如果找到两个这样的文件,或者一个名为spam.txt
的文件根本不是图像,或者......,你还必须决定该怎么做。
最简单的版本(只是尝试打开你找到的第一个spam.*
)是这样的:
def open_image_file(path, name):
for fullname in os.listdir(path):
if fnmatch.fnmatch(f, name + '.*'):
return PhotoImage(file=os.path.join(path, fullname))
现在你可以这样做:
logo = open_image_file(r'C:\Python34', e.get())
(如果找不到名为spam.*
的文件,您最终会得到None
。例如,如果发现文本文件或可执行文件,PhotoImage
引发了异常,您将获得例外。否则,logo
将是第一个PhotoImage
文件的spam.*
。)