2014-09-04 35 views
0

我已經編寫了一個功能,可以搜索文件夾並在新窗口中顯示圖片(如果該文件存在但我總是必須先添加圖像文件格式或擴展名)該功能可以工作。在不添加文件格式的情況下使用PIL顯示圖像

有沒有辦法可以解決忽略擴展像.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

您的意思是您不希望用戶必須輸入擴展名,並且您希望程序使用任何匹配的擴展名查找所有可能的圖像文件用戶輸入了什麼? – abarnert 2014-09-04 01:36:23

+0

作爲一個方面說明:使用4個字符的縮進,而不是1;這使得很難說出函數的哪些部分以及函數的外部。特別是因爲我認爲你弄錯了 - 從'window = Tk()'到最後的代碼幾乎肯定不應該在'display_pix()'裏面。 – abarnert 2014-09-04 01:46:03

回答

0

如果文件被命名爲spam.gif,這是它的文件名,所以你不能打開它只是spam。 (是的,Windows資源管理器試圖隱藏你的這個,但只是在有限的程度上 - 如果你想做同樣的事情,你必須做同樣的事情Windows資源管理器。)

如果你想用戶要能夠輸入spam,並且要讓程序自動打開spam.gifspam.jpgspam.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將是第一個spam.*文件的PhotoImage)。

+0

謝謝abarnert ..但我似乎無法繞過它..你可以重新寫代碼就像我發送它的方式?...真的很感激它 – 2014-09-04 03:26:30

+1

@JoeyDanielDarko:如果你感到困惑具體的東西,要求具體的東西。如果你想讓某人爲你編寫代碼,所以你不必瞭解它是如何工作的,你需要僱用一名顧問,而不是問StackOverflow。 – abarnert 2014-09-04 06:42:26

相關問題