TkFileDialog не показывает параметры расширения файла на OSX10.12.6 - PullRequest
0 голосов
/ 11 сентября 2018

Я использую пакет Tkinter tkFileDialog в некотором коде Python.Следующая команда предлагает пользователю выбрать файл с возможностью изменения типа файла между «csv» или «any».

tkFileDialog.askopenfilename(filetypes=[('csv files', '*.csv'), ('all 
    files', '*.*')],)

В Windows 10 это работает должным образом, но в OSX10.12.6 раскрывающийся список типов файлов недоступен.Он позволяет только выбирать файлы CSV, без возможности изменить тип файла.Как я могу заставить это работать должным образом?Моя единственная идея заключается в том, что tcl 8.6 на OSX ведет себя иначе, чем tcl 8.5 на Windows.

1 Ответ

0 голосов
/ 11 сентября 2018

Это верно. Фактическое диалоговое окно файла в OSX не поддерживает выбор типа файла. Небольшое количество приложений расширяет его, чтобы добавить эту возможность, но Tk нет, как и многие другие приложения. Это потому, что в руководстве по стилю ОС указано, что этого не делать.

Если вам действительно нужен выбор типа файла, используйте реализованную в скриптах версию диалогов; они кроссплатформенные (и то, что всегда используется на платформах Unix / X11). К сожалению, они не специально сопоставлены с вызовами Python; вам нужно будет использовать необработанный интерфейс вызова. (См. Как вызывать процедуру TCL с использованием Python , чтобы узнать, как работает метод .tk.eval; он плохо документирован, но это именно то, что вам нужно.)

# Root context object
root = tkinter.Tk()

# The filetypes *IN TCL FORMAT*
filetypes = "{{csv files} *.csv} {{all files} *}"

# The actual call; note that that that's a very unusual command name by Tcl standards!
# 
filename = root.tk.eval('::tk::dialog::file:: open -filetypes {' + filetypes + '}')

# Fix up the result; empty string means "no file selected"
if filename == "":
    filename = None

Извините, это грязно, и определенно не будет выглядеть или чувствовать себя нативным в OSX, но, по крайней мере, должно работать ...

...