Четверг, 28.11.2024, 02:50 | Приветствую Вас Гость

...

Блог


22:49
Изучаем tkinter

Библиотека tkinter в языке программирования Python позволяет создавать графические приложения.Элементы графического интерфейса  в терминологии tkinter называются виджетами.
Импортирование библиотеки tkinter в Python 3 может производится следующей строкой кода:
from tkinter import *
Класс Tk - это базовый объект,вызов которого продуцирует окно приложения.
Событийная ориентированность библиотеки tkinter подразумевает,что действия пользователя должным образом в главном цикле приложения обрабатываются и вызывают соответствующий код,определенный программистом.
Для обработки событий организуется цикл,который в библиотеке tkinter называется mainloop().
В библиотеке tkinter существует большое количество виджетов,которые можно использовать в своих программах.
Создать окно верхнего уровня и закрыть программу можно с помощью такого кода:
from tkinter import *
def window_quit():
    root.quit() 
root=Tk()
root.title('Окно верхнего уровня')
root.geometry('500x500+0+0') 
root.protocol('WM_DELETE_WINDOW', window_quit)
root.mainloop()
Переменная root позволяет выполнять манипуляции с окном.
Строка кода root.title('Окно верхнего уровня') - задаёт заголовок окна.Вместо текстовой строки 'Окно верхнего уровня' можно ввести любой текст,который захочет программист.
Строка кода root.geometry('500x500+0+0') - создаёт окно верхнего уровня шириной и высотой 500 пикселей.X-кордината равна нулю,также как и Y-координата.
Строка кода root.protocol('WM_DELETE_WINDOW', window_quit) - указывает функцию во втором аргументе,которая выполняется при наступлении события,указанного в первом аргументе.В данном случае событие называется WM_DELETE_WINDOW,которое возникает при уничтожении окна верхнего уровня.Функция window_quit завершает выполнение программы с помощью следующей строки кода root.quit().
Строка кода root.mainloop() - вводит программу в главный цикл обработки,без этой строки программа завершится моментально.

А теперь давайте поработаем с самым распространёным элементом в мире программирования графических интерфейсов - обыкновенной кнопкой.Этот элемент так и хочет,чтобы пользователь на него нажал.)))

from tkinter import *
def click():
 print("hello")
root=Tk()
button1=Button(root,text=''hello",width=25,height=5,command=click)
button1.pack()
root.mainloop()

Для размещения  кнопки в окне приложения использован упаковщик pack().
Текст кнопки указывается в именованном аргументе text c использованием знака  равно,который в языке программирования Python является оператором присвоения.Ширина кнопки указывается в именованном аргументе width.Высота кнопки в именованном аргументе height.У кнопки существуют и другие свойства,которые может задать программист.Эти неупомянутые свойства определяются аналогичным способом.


Виджет Text - представляет собой  поле для ввода произвольного текста.С помощью методов данного виджета можно добавлять,удалять и получать введенную пользователем информацию.Обработка введенной информации осуществляется посредством возможностей,заложенных в языке программирования Python.


from tkinter import *
def insert_text():
 text1.insert(1.0,'Текст,заданный пользователем')
def delete_text():
 print(text1.get('1.0', END)) #вывести в консоль содержимое поля
 text1.delete('1.0', END) # очистить текстовое поле
root=Tk()
text1=Text(root,font='Arial 14') # установить используемый шрифт
text1.pack(side=LEFT)

button1=Button(root,text='добавить текст',font='arial 14',command=insert_text)
button2=Button(root,text='удалить текст',font='arial 14',command=delete_text)
button1.pack()
button2.pack()
root.mainloop()

Checkbutton - графический элемент,который используется для выделения пункта галочкой.Эта самая галочка показывает,что пункт выбран и может соответствующим образом обрабатываться в программе.Каждый отдельный виджет Checkbutton имеет состояние,при котором он выделен,и состояние,при котором он не выделен.Отдельно от виджета Checkbutton должна быть определена переменная состояния,которая указывается в свойстве variable.Свойство onvalue - указывает значение,что данный виджет будет принимать при включенном состоянии.Свойство offvalue - указывает значение,которое будет приниматься при выключенном состоянии.


from tkinter import *
def set_window():
 global var_x,var_y
 if (boolsize.get() == 1): # проверка на включение флага
  var_x = var_x + 10
  var_y = var_y + 10
 if (boolsize.get() == 0): # проверка на выключение флага
  var_x = var_x - 10
  var_y = var_y - 10
 root.geometry(str(var_x)+"x"+str(var_y)) # формирование размеров окна
root=Tk()
var_x = 250
var_y = 250
root.geometry("250x250")
boolsize=BooleanVar() # переменная,хранящая флаг перестройки окна
check1=Checkbutton(root,text='флаг перестройки окна на 10 пикселей',variable=boolsize,onvalue=1,offvalue=0)
button1=Button(root,text='перестроить окно',font='arial 14',command=set_window)
check1.pack()
button1.pack()
root.mainloop()


Radiobutton - графический элемент,который позволяет выбрать один и только один пункт из группы пунктов.То есть,невозможно выбрать сразу два пункта.В  этом и проявляется главные отличие виджета Radiobutton от виджета Checkbutton.Здесь тоже имеется свойство variable,которое определяет выбор пользователя.Свойство value - присваивает свойству variable значение,которое в языке программирования Python можно обработать с помощью оператора ветвления if.

from tkinter import *
def set_window():
 global var_x,var_y
 if (var.get() == 1):
  var_x = var_x + 10
  var_y = var_y + 10
 if (var.get() == 2):
  var_x = var_x + 25
  var_y = var_y + 25
 if (var.get() == 3):
  var_x = var_x + 50
  var_y = var_y + 50

 root.geometry(str(var_x)+"x"+str(var_y))
root=Tk()
var_x = 250
var_y = 250
root.geometry("250x250")
var=IntVar() 
rbutton1=Radiobutton(root,text='увеличение на 10 px',variable=var,value=1)
rbutton2=Radiobutton(root,text='увеличение на 25 px',variable=var,value=2)
rbutton3=Radiobutton(root,text='увеличение на 50px',variable=var,value=3)
button1=Button(root,text='перестроить окно',font='arial 14',command=set_window)
rbutton1.pack()
rbutton2.pack()
rbutton3.pack()
button1.pack()
root.mainloop()

Переменная имеет в  листинге выше уже не определяется,как логическая(булевская) переменная,а имеет целочисленное значение,так как три принимаемые ей значения не вписывается в парадигму состояния включения(1,"да") и выключения(0,"нет"),приобретает троичную парагдигму("да","нет","не знаю").

Listbox - графический элемент,позволяющий выбрать один  или совокупность пунктов.Если значение свойства selectmode равно SINGLE,то в данном виджете можно выделить только один пункт.В противном случае свойство selectmode принимает значение EXTENDED,которое даёт возможность множественного выбора.

from tkinter import *
def set_window():
 var = listbox1.curselection()[0] # получение выбранного пункта
 global var_x,var_y
 if (var == 0):
  var_x = var_x + 10
  var_y = var_y + 10
 if (var == 1):
  var_x = var_x + 25
  var_y = var_y + 25
 if (var == 2):
  var_x = var_x + 50
  var_y = var_y + 50
 root.geometry(str(var_x)+"x"+str(var_y))
root=Tk()
var_x = 250
var_y = 250
root.geometry("250x250")
listbox1=Listbox(root,height=5,width=25,selectmode=SINGLE)
list1=["увеличение на 10 пикселей","увеличение на 25 пикселей","увеличение на 50 пикселей"]
for i in list1:
 listbox1.insert(END,i) # добавление списка  элементов
listbox1.pack()
button1=Button(root,text='перестроить окно',font='arial 14',command=set_window)
button1.pack()
root.mainloop()

Для заполнения текстовыми пунктами экземпляра Listbox в листинге выше использован цикл for.Этот цикл последовательно формирует текстовые пункты,беря текст из списка(list),который очень похож на конструкцию массивов в языках отличных от языка Python.

Многие примеры использования виджетов в данном обзоре адаптировались к увеличению окна приложения на определенное число пикселей в зависимости от того,какой выбор сделал пользователь.В следующем примере используется виджет Listbox в качестве платформы для выбора не изменения размера окна,а выбора фонового цвета.

from tkinter import *
def set_window():
 var = listbox1.curselection()[0] # получение выбранного пункта
 if (var == 0):
  root.configure(background='red')
 if (var == 1):
  root.configure(background='green')
 if (var == 2):
  root.configure(background='blue')
root=Tk()
root.geometry("250x250")
listbox1=Listbox(root,height=5,width=25,selectmode=SINGLE)
list1=["красный","зеленый","синий"]
for i in list1:
 listbox1.insert(END,i)
listbox1.pack()
button1=Button(root,text='перекрасить окно',font='arial 14',command=set_window)
button1.pack()
root.mainloop()

Menu - графический элемент,представляющий из себя список текстовых пунктов,к которым можно привязать функцию,что будет выполняться при клике на пункт.Привязать функцию к пункту меню можно с помощью свойства command.Метод add_command() добавляет пункты в меню.Также главное меню нужно привязать к окну приложения,а то он не будет видим,следовательно с ним невозможно будет взаимодействовать пользователю.

from tkinter import *
from tkinter import messagebox
import sys
def mycommand1():
 messagebox.showinfo("Сообщение", "Вы кликнули первый пункт меню")
def mycommand2():
 res = messagebox.askquestion("Сообщение", "Вы действительно хотите завершить программу?")
 if  res == 'yes':
  root.destroy()
  sys.exit()
 else:
  messagebox.showinfo("Сообщение", "вы отменили выход из программы")
 
root = Tk()
mainmenu = Menu() # создание главного экземляра меню 
root.config(menu=mainmenu) #привязка к главному окну
submenu = Menu(mainmenu,tearoff=0) #создание подменю
submenu.add_command(label="Первая команда",command=mycommand1)
submenu.add_command(label="Вторая команда",command=mycommand2)
mainmenu.add_cascade(label="Команды", menu=submenu) #добавление подменю в главное меню
root.mainloop() 

Просмотров: 360 | Добавил: moskov | Рейтинг: 0.0/0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Меню сайта

Мини-чат

Статистика


Онлайн всего: 4
Гостей: 4
Пользователей: 0

Форма входа

Календарь

«  Сентябрь 2019  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30

Архив записей

Друзья сайта

  • ЗОВ КОСМОСА

  • Хулиган Вселенной

  • Тюремная поэзия

  • Религиозная поэзия

  • Сайт клана ЛеГиоН
  • Поиск