2014-01-08 2 views
2

Я использую tkinters' askopenfilename с горсткой предопределенных типов файлов:Получить вокруг tkinters' проверка askopenfilename Filetype

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

типы файлов включают 'PNG', 'JPG', '' BMP, ...

filedialog будет показывать только файлы указанного типа, как я ожидал. Но когда я набираю имя файла, он просто примет его, независимо от того, какой тип он есть.

Это ошибка tkinter? Ожидается ли поведение? Мне нужно обходное решение или я могу изменить поведение 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

Смежные вопросы