Top.Mail.Ru

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!

Добавить комментарий

Sidebar