Python Tkinter: добавление виджета в диалоговые окна файлов

Я использую Tkinter с Python 2.6 и 2.7 для программирования графических пользовательских интерфейсов.

Эти пользовательские интерфейсы содержат диалоговые окна для открытия файлов и сохранения данных из модуля tkFileDialog . Я хотел бы адаптировать диалоги и добавить некоторые дополнительные виджеты ввода, например, чтобы позволить пользователям оставлять комментарии.

Есть ли способ сделать это?

Кажется, что диалоговые окна файлов берутся непосредственно из операционной системы. В Tkinter они производятся из класса Dialog в модуле tkCommonDialog и вызывают метод tk.call("tk_getSaveFile") виджета фрейма (в этом случае для сохранения данных).

Я не мог узнать, где этот метод определен.

  • Понимание родителя и контроллера в Tkinter __init__
  • Разбор результатов askopenfilenames ()?
  • Установите значение по умолчанию для ttk Combobox
  • Пользовательское окно Tkinter
  • Как привязать нажатие кнопки к кнопке в Tkinter
  • Как передать аргумент обработчику событий в tkinter?
  • Есть ли что-нибудь, что мне нужно знать об использовании Tkinter и pygame вместе?
  • Запуск matplotlib в tkinter
  • 2 Solutions collect form web for “Python Tkinter: добавление виджета в диалоговые окна файлов”

    метод call определен в _tkinter.c , но нет ничего интересного для вашей конкретной задачи. Он просто вызывает команду Tcl, и команда tk_getSaveFile выполняет всю работу.

    И да, когда в операционной системе есть собственное диалоговое окно файла, tk_getSaveFile использует их (например, GetSaveFileName используется в Windows). Там можно было бы добавить виджеты, но не без вмешательства с источниками C Tk. Если вы уверены, что ваша цель использует не-родные диалоги Tk, вы можете добавить что-то в свою иерархию виджетов с помощью hacking ::tk::dialog::file:: procedure из Tk (см. library/tkfbox.tcl ).

    Я предпочел бы альтернативную реализацию tk_getSaveFile , написанную в чистом Tcl / Tk и никогда не используя средство ОС. Таким образом, мы можем быть уверены, что его компоновка одинакова для всех ОС, и она не будет внезапно изменяться с новой версией Tk. Это еще далеко не тривиально, чтобы обеспечить удобный API для python вокруг него, но, по крайней мере, это возможно.

    Мне пришлось избавиться от операторов canvasx / y. Теперь эта строка просто считывает set item [$data(canvas) find closest $x $y] , который работает хорошо. $data(canvas) canvasx $x для собственных работ хорошо, но не в связи с find closest , ни если он написан в двух строках.

    Python - лучший язык программирования в мире.