2014-01-08 85 views
2

我使用tkinters' askopenfilename與預定義的文件類型屈指可數:玩轉tkinters' askopenfilename文件類型檢查

tkinter.filedialog.askopenfilename(parent=self, 
            title=_("Select Attachment"), 
            multiple=False, 
            initialdir=initialdir, 
            filetypes=filetypes) 

文件類型包括 'PNG', 'JPG', 'BMP',...

像我期望的那樣,filedialog將只顯示指定類型的文件。 但是,當我輸入文件名稱時,它只會接受它,而不管它是哪種類型。

這是tkinter的bug嗎?它預期的行爲?我需要一種解決方法嗎?還是我可以更改askopenfilenames的行爲?

回答

0

我希望這是預期的行爲。畢竟 - You can't actually know the file's data type until you open it up

因此,無論您做什麼,用戶都可以通過簡單地使用程序的白名單擴展名之一重命名文件來避開它。當然,如果你真的想要健壯,你可以閱讀前幾個字節和check the magic number,並希望這是正確的;-)。

+0

當然,用戶可以通過重命名來作弊。當文件不存在時(從askopenfilename處理)或給定文件類型是意外的(從我的代碼處理)時,具有不同的行爲只是醜陋的。區別很明顯......一方面,askopenfilename保持打開狀態,等待另一方面新的文件名,askopenfilename關閉並在無效文件名後重新打開。 – Sam

+0

我從來沒有意識到這是每個文件對話的預期行爲。 – Sam