Python. GUI
Продолжаю тему Python, начало см. Pyton. Начало
Сегодня я более подробно ознакомлю вас с GUI. Самая простая распространенная GUI-библиотека — это tkinter, она уже встроена во многие идеешки языка Python, в том числе в ту, на которой мы тренируемся. Для подключение этой библиотеки просто в начале программы нужно вставить вот такую строку:
from tkinter import *
Как вы поняли, этой строкой мы импортируем соответствующую библиотеку. Работать с этой библиотекой следует следующим образом:
- Создать корень (ядро нашего GUI-приложения).
- Задать параметры корня (ядра приложения).
- Создать рабочую область.
- Вставить в рабочую область элементы управления.
Вот так в GUI будет выглядеть программа «Hello, World!»:
from tkinter import * # родительский элемент root = Tk() # устанавливаем название окна root.title("Название окна") # устанавливаем минимальный размер окна root.minsize(325,230) # выключаем возможность изменять окно root.resizable(width=False, height=False) # создаем рабочую область frame = Frame(root) frame.grid() # вставляем текст label = Label(frame, text="Hello, World!").grid(row=1,column=1)
И выдаст она вот такое окно с надпись «Hello, World!»:
Теперь разберемся с элементами графического диалога. С текстовой меткой Label вы только что познакомились:
# вставляем текст label = Label(frame, text="Hello, World!").grid(row=1,column=1)
Теперь познакомимся с кнопкой (Button):
# вставляем кнопку but = Button(frame, text="Кнопка").grid(row=2, column=1)
Но у нас получилась какая-то «куцая» кнопка, мы на нее нажимаем — и ничего не происходит. Давайте добавить обработчик ивента. Сначала его нужно объявить в виде функции:
def my_event_handler(): print("Hello, World!")
Затем надо прикрепить этот обработчик к кнопке. Это можно сделать прямо при создании кнопки:
# вставляем кнопку but = Button(frame, text="Кнопка", command=my_event_handler).grid(row=2, column=1)
Ну и все, теперь при нажатии на кнопочку у нас выходит в консоли «Hello, World!»:
Вот весь текст программы:
from tkinter import * def my_event_handler(): print("Hello, World!") # родительский элемент root = Tk() # устанавливаем название окна root.title("Название окна") # устанавливаем минимальный размер окна root.minsize(325,230) # выключаем возможность изменять окно root.resizable(width=False, height=False) # создаем рабочую область frame = Frame(root) frame.grid() # вставляем текст label = Label(frame, text="Hello, World!").grid(row=1,column=1) # вставляем кнопку but = Button(frame, text="Кнопка", command=my_event_handler).grid(row=2, column=1)
Но выводить в консоль «Hello, World» неинтересно. Попробуем изменить текст текстовой метки. Один из вариантов сделать это — связать текстовую метку со специальной переменой:
# вставляем текст txt = StringVar() txt.set("Hello, World!"); label = Label(frame,textvariable=txt).grid(row=1,column=1)
Теперь изменим обработчик события:
def my_event_handler(): txt.set('абракадабра')
И все, теперь при нажатии на копку меняется текстовая надпись.
Теперь разберемся с текстовым полем ввода (Entry):
# вставляем поле для ввода edit_field = Entry(frame, width=30) edit_field.grid(row=3,column=1)
Обратиться к тексту, введенному в это поле, можно методом get():
def my_event_handler(): txt.set(edit_field.get())
Флажок (Checkbutton). У его необходимо задать текст, переменную флажка, значения этой переменной для включенного и выключенного состояния:
# вставляем флажок ch_var=StringVar() ch = Checkbutton(root,text="Это пример флажка",variable=ch_var, onvalue="on",offvalue="off") ch.grid(row=4,column=1)
При изменении значения флажка в переменную, заданную в параметре variable, установиться соответственно onvalue или offvalue.
Пример обращения к переменной:
def my_event_handler(): txt.set(ch_var.get())
Ставим галочку, вызываем обработчик, например, если он у нас навешан на кнопочку, то жмем на нее:
мы видим, что в переменной «on», выключим и повторим:
теперь видим, что в переменной «off».
Теперь радиокнопки:
# вставляем радиокнопки sex = IntVar() sex.set(0) rad0 = Radiobutton(frame,text = "Мужской", variable = sex, value = 1) rad0.grid(row=5,column=1) rad1 = Radiobutton(frame,text = "Женский", variable = sex, value = 0) rad1.grid(row=6,column=1)
Значение связанной с флажком переменой, как вы поняли, задается параметром value. При включении соответствующей радиокнопки переменная примет соответствующее значение.
Поскольку цель статьи не заменить документацию по Python, а лишь рассказать основные моменты как вообще юзать GUI, то на этом статья подходит к концу. использования В заключении список:
# Вставляем визуальный список lb=Listbox() lb.grid(row=7,column=1) lb.insert(0,"Проба") lb.insert(0,"Hello, World!") lb.insert(0,"Еще один элемент")
Что видим? Вот что:
Как узнать выбранный элемент? Метод curselection, возвращает кортеж:
print(lb.curselection())
Кортеж — это такая структура данных, представляющая собой заключенный в круглые скобки список значений, например: (1, 2, 3, 4, «Какой-то элемент типа строки»)
Comments
So empty here ... leave a comment!