Привет всем! Сегодня, надеюсь, мы закончим разбираться с созданием интерфейсов в Python с библиотекой Tkinter. Это уже пятая запись, предыдущие четыре доступны по ссылке. Поехали!
Для создания диалога выбора файлов в Tkinter используется следующая конструкция:
-
from tkinter import filedialog
-
-
file = filedialog.askopenfilename()
Как видно из кода — в переменной file будет содержаться полный путь к выбранному файлу. Кстати, если вам нужно организовать выбор нескольких файлов — используем конструкцию:
-
files = filedialog.askopenfilenames()
Интересно, что в случае необходимости можно ограничить пользователя выбором файлов только определенного типа:
-
file = filedialog.askopenfilename(filetypes = (('Только текстовые файлы','*.txt'),('Все файлы','*.*')))
Нужно дать возможность пользователю выбрать директорию? Используем конструкцию в виде:
-
dir = filedialog.askdirectory()
а если же нам нужно дать возможность выбрать директорию только по определенному пути — используем:
-
from os import path
-
-
file = filedialog.askopenfilename(initialdir= path.dirname(__file__))
Как видите — все просто 😉
Идем далее… теперь разберемся, как создавать меню. Для создания меню используется конструкция:
-
from tkinter import Menu
-
-
menu = Menu(window)
-
menu.add_command(label='File')
-
-
window.config(menu=menu)
Как видно из кода — мы вначале создаем меню, затем добавляем нашу первую метку и, наконец, назначаем меню нашему окну.
И да — вы конечно же можете добавить пункты меню в любое меню, используя функцию add_cascade(), например:
-
menu.add_cascade(label='File', menu=new_item)
Если мы все сделали правильно — после запуска кода мы получим нечто вроде:
Нужно два пункта в меню или больше? Все очень просто:
-
from tkinter import *
-
from tkinter import Menu
-
-
window = Tk()
-
window.title('Тест')
-
menu = Menu(window)
-
new_item = Menu(menu)
-
new_item.add_command(label='Новое')
-
menu.add_cascade(label='Файл', menu=new_item)
-
new_item.add_separator()
-
new_item.add_command(label='Редактирование')
-
window.config(menu=menu)
-
-
window.mainloop()
после запуска этого кода мы увидим:
Кстати! Как видно из скрина — по-умолчанию у нас в самом начале меню возникает пунктирная линия, по клику на которую мы получим меню, показывающееся в отдельном окошке. Что бы отключить эту функцию — нужно использовать:
-
new_item = Menu(menu, tearoff=0)
И — на всякий случай, конечно же — напомню, как создавать реакцию на клик по тому или иному пункту меню:
-
new_item.add_command(label='New', command=clicked)
Так — с созданием меню разобрались, однако — что делать, если нам нужно создать в меню несколько табов? В Tkinter это реализуется за три шага:
1. Сначала мы создаем элемент управления вкладками с помощью класса Notebook
Создайте вкладку, используя класс Frame.
Добавьте эту вкладку в элемент управления вкладками.
Упакуйте вкладку, чтобы она стала видимой в окне.
В видео кода это выглядит следующим образом:
-
from tkinter import *
-
from tkinter import ttk
-
-
window = Tk()
-
window.title('Test')
-
tab_control = ttk.Notebook(window)
-
tab1 = ttk.Frame(tab_control)
-
tab2 = ttk.Frame(tab_control)
-
tab_control.add(tab1, text='Первая вкладка')
-
tab_control.add(tab2, text='Вторая вкладка')
-
lbl1 = Label(tab1, text= 'Текст по первой вкладке')
-
lbl1.grid(column=0, row=0)
-
lbl2 = Label(tab2, text= 'Текст по второй вкладке')
-
lbl2.grid(column=0, row=0)
-
tab_control.pack(expand=1, fill='both')
-
-
window.mainloop()
Собственно, на этом все, что можно было сказать по поводу библиотеки Tkinter, с помощью которой можно создавать интерфейсы в Python 🙂 Спасибо за внимание!
В случае возникновения вопросов — пожалуйста, пишите на почту или в Telegram.