Tkinter - создание меню

Tkinter — что это с примерами на русском — часть 5

Привет всем! Сегодня, надеюсь, мы закончим разбираться с созданием интерфейсов в Python с библиотекой Tkinter. Это уже пятая запись, предыдущие четыре доступны по ссылке. Поехали!

Для создания диалога выбора файлов в Tkinter используется следующая конструкция:

  1. from tkinter import filedialog
  2.  
  3. file = filedialog.askopenfilename()

Как видно из кода — в переменной file будет содержаться полный путь к выбранному файлу. Кстати, если вам нужно организовать выбор нескольких файлов — используем конструкцию:

  1. files = filedialog.askopenfilenames()

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

  1. file = filedialog.askopenfilename(filetypes = (('Только текстовые файлы','*.txt'),('Все файлы','*.*')))

Нужно дать возможность пользователю выбрать директорию? Используем конструкцию в виде:

  1. dir = filedialog.askdirectory()

а если же нам нужно дать возможность выбрать директорию только по определенному пути — используем:

  1. from os import path
  2.  
  3. file = filedialog.askopenfilename(initialdir= path.dirname(__file__))

Как видите — все просто 😉
Идем далее… теперь разберемся, как создавать меню. Для создания меню используется конструкция:

  1. from tkinter import Menu
  2.  
  3. menu = Menu(window)
  4. menu.add_command(label='File')
  5.  
  6. window.config(menu=menu)

Как видно из кода — мы вначале создаем меню, затем добавляем нашу первую метку и, наконец, назначаем меню нашему окну.
И да — вы конечно же можете добавить пункты меню в любое меню, используя функцию add_cascade(), например:

  1. menu.add_cascade(label='File', menu=new_item)

Если мы все сделали правильно — после запуска кода мы получим нечто вроде:

Нужно два пункта в меню или больше? Все очень просто:

  1. from tkinter import *
  2. from tkinter import Menu
  3.  
  4. window = Tk()
  5. window.title('Тест')
  6. menu = Menu(window)
  7. new_item = Menu(menu)
  8. new_item.add_command(label='Новое')
  9. menu.add_cascade(label='Файл', menu=new_item)
  10. new_item.add_separator()
  11. new_item.add_command(label='Редактирование')
  12. window.config(menu=menu)
  13.  
  14. window.mainloop()

после запуска этого кода мы увидим:
Tkinter - создание меню 2

Кстати! Как видно из скрина — по-умолчанию у нас в самом начале меню возникает пунктирная линия, по клику на которую мы получим меню, показывающееся в отдельном окошке. Что бы отключить эту функцию — нужно использовать:

  1. new_item = Menu(menu, tearoff=0)

И — на всякий случай, конечно же — напомню, как создавать реакцию на клик по тому или иному пункту меню:

  1. new_item.add_command(label='New', command=clicked)

Так — с созданием меню разобрались, однако — что делать, если нам нужно создать в меню несколько табов? В Tkinter это реализуется за три шага:
1. Сначала мы создаем элемент управления вкладками с помощью класса Notebook
Создайте вкладку, используя класс Frame.
Добавьте эту вкладку в элемент управления вкладками.
Упакуйте вкладку, чтобы она стала видимой в окне.
В видео кода это выглядит следующим образом:

  1. from tkinter import *
  2. from tkinter import ttk
  3.  
  4. window = Tk()
  5. window.title('Test')
  6. tab_control = ttk.Notebook(window)
  7. tab1 = ttk.Frame(tab_control)
  8. tab2 = ttk.Frame(tab_control)
  9. tab_control.add(tab1, text='Первая вкладка')
  10. tab_control.add(tab2, text='Вторая вкладка')
  11. lbl1 = Label(tab1, text= 'Текст по первой вкладке')
  12. lbl1.grid(column=0, row=0)
  13. lbl2 = Label(tab2, text= 'Текст по второй вкладке')
  14. lbl2.grid(column=0, row=0)
  15. tab_control.pack(expand=1, fill='both')
  16.  
  17. window.mainloop()

Собственно, на этом все, что можно было сказать по поводу библиотеки Tkinter, с помощью которой можно создавать интерфейсы в Python 🙂 Спасибо за внимание!
В случае возникновения вопросов — пожалуйста, пишите на почту или в Telegram.