Виджет Python Tkinter Radiobutton — КиберПедия 

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Виджет Python Tkinter Radiobutton

2021-02-01 326
Виджет Python Tkinter Radiobutton 0.00 из 5.00 0 оценок
Заказать работу

Radiobutton используется для выбора одного из нескольких вариантов из данного списка. Radiobutton можно разработать в кадре Python Tkinter с помощью метода Radiobutton ().

Синтаксис

radiobutton1 = Radiobutton(frame1, text= "C Programming", value=0)

Здесь мы создали переменную radiobutton1, которая хранится в методе Radiobutton (). Нам нужно указать несколько важных параметров, а именно:

1. Фрейм: указывает, к какому фрейму мы обращаемся.
2. Текст: чтобы указать, какой текст нам нужно написать против него.
3. Значение: чтобы указать значение по умолчанию для Radiobutton.

Помните, что значение Radiobutton по умолчанию - 1, т.е. оно выбрано по умолчанию. Чтобы изменить его значение, нам нужно указать параметр, который указывает значение 0.

пример

from Tkinter import *

root= Tk()

root.title("My First GUI")

root.geometry("800x200")

frame1=Frame(root)

frame1.grid()

label1 = Label(frame1, text = "Here is a label!")

label1.grid()

text1 = Text(frame1, width = 35, height = 5)

text1.grid()

radiobutton1 = Radiobutton(frame1, text= "C Programming", value=0)

radiobutton1.grid()

radiobutton2 =Radiobutton(frame1, text= "Python Programming")

radiobutton2.grid()

root.mainloop()

Выход

Под графическим интерфейсом пользователя (GUI) подразумеваются все те окна, кнопки, текстовые поля для ввода, скроллеры, списки, радиокнопки, флажки и др., которые вы видите на экране, открывая то или иное приложение. Через них вы взаимодействуете с программой и управляете ею. Все эти элементы интерфейса будем называть виджетами (widgets).

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

Существует множество библиотек GUI, среди которых Tk не самый популярный инструмент, хотя с его помощью написано немало проектов. Он был выбран для Python по-умолчанию. Установочный файл интерпретатора Питона обычно уже включает пакет tkinter в составе стандартной библиотеки.

Tkinter можно охарактеризовать как переводчик с языка Python на язык Tcl. Вы пишете программу на Python, а код модуля tkinter переводит ваши инструкции на язык Tcl, который понимает библиотека Tk.

Приложения с графическим интерфейсом пользователя событийно-ориентированные. Вы уже должны иметь представление о структурном и желательно объектно-ориентированном программировании. Событийно-ориентированное ориентировано на события. То есть та или иная часть программного кода начинает выполняться лишь тогда, когда случается то или иное событие.

Событийно-ориентированное программирование базируется на объектно-ориентированном и структурном. Даже если мы не создаем собственных классов и объектов, то все-равно ими пользуемся. Все виджеты – объекты, порожденные встроенными классами.

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

Tkinter импортируется стандартно для модуля Python любым из способов:

  • import tkinter
  • from tkinter import *
  • import tkinter as tk

Можно импортировать отдельные классы, что делается редко. В данном курсе мы будем использовать выражение from tkinter import *.

Далее, чтобы написать GUI-программу, надо выполнить приблизительно следующее:

  1. Создать главное окно.
  2. Создать виджеты и выполнить конфигурацию их свойств (опций).
  3. Определить события, то есть то, на что будет реагировать программа.
  4. Описать обработчики событий, то есть то, как будет реагировать программа.
  5. Расположить виджеты в главном окне.
  6. Запустить цикл обработки событий.

Последовательность не обязательно такая, но первый и последний пункты всегда остаются на своих местах. Посмотрим все это в действии.

В современных операционных системах любое пользовательское приложение заключено в окно, которое можно назвать главным, так как в нем располагаются все остальные виджеты. Объект окна верхнего уровня создается от класса Tk модуля tkinter. Переменную, связываемую с объектом, часто называют root (корень):

root = Tk()

Пусть в окне приложения располагаются текстовое поле, метка и кнопка. Данные объекты создаются от классов Entry, Label и Button модуля tkinter. Мы сразу сконфигурируем некоторые их свойства с помощью передачи аргументов конструкторам этих классов:

ent = Entry(root, width=20)

but = Button(root, text="Преобразовать")

lab = Label(root,

       bg='black', fg='white')

Устанавливать свойства объектов не обязательно при из создании. Существуют еще пара способов, с помощью которых это можно сделать после.

Первым аргументом в конструктор виджета передается виджет-хозяин, то есть тот, на котором будет располагаться создаваемый. В случае, когда элементы GUI помещаются непосредственно на главное окно, родителя можно не указывать. То есть в нашем примере мы можем убрать root:

ent = Entry(width=20)

but = Button(text="Преобразовать")

lab = Label(bg='black', fg='white')

Однако виджеты не обязательно располагаются на root 'е. Они могут находиться на других виджетах, и тогда указывать "мастера" необходимо.

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

def str_to_sort_list(event):

s = ent.get()

s = s.split()

s.sort()

lab['text'] = ' '.join(s)

У функций, которые вызываются при наступлении события с помощью метода bind, должен быть один параметр. Обычно его называют event, то есть "событие".

В нашей функции с помощью метода get из поля забирается текст, представляющий собой строку. Она преобразуется в список слов с помощью метода split. Потом список сортируется. В конце изменяется свойство text метки. Ему присваивается строка, полученная из списка с помощью строкового метода join.

Теперь необходимо связать вызов функции с событием:

but.bind('<Button-1>', str_to_sort_list)

В данном случае это делается с помощью метода bind. Ему передается событие и функция-обработчик. Событие будет передано в функцию и присвоено параметру event. Здесь событием является щелчок левой кнопкой мыши, что обозначается строкой '<Button-1>'.

В любом приложении виджеты не разбросаны по окну как попало, а организованы, интерфейс продуман до мелочей и обычно подчинен определенным стандартам. Пока расположим элементы друг под другом с помощью наиболее простого менеджера геометрии tkinter – метода pack:

ent.pack()

but.pack()

lab.pack()

Метод mainloop экземпляра Tk запускает главный цикл обработки событий, что в том числе приводит к отображению главного окна со всеми "упакованными" на нем виджетами:

root.mainloop()

Полный код программы:

from tkinter import *

 

 

def str_to_sort_list(event):

s = ent.get()

s = s.split()

s.sort()

lab['text'] = ' '.join(s)

 

 

root = Tk()

 

ent = Entry(width=20)

but = Button(text="Преобразовать")

lab = Label(bg='black', fg='white')

 

but.bind('<Button-1>', str_to_sort_list)

 

ent.pack()

but.pack()

lab.pack()

root.mainloop()

 

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

Попробуем теперь реализовать в нашей программе объектно-ориентированный подход. Это необязательно, но нередко бывает уместным. Пусть группа из метки, кнопки и поля представляет собой один объект, порождаемый от класса Block. Тогда в основной ветке программы будет главное окно, объект типа Block и запуск окна. Поскольку блок должен быть привязан к главному окну, то неплохо бы передать в конструктор класса окно-родитель:

from tkinter import *

 

root = Tk()

 

first_block = Block(root)

 

root.mainloop()

Теперь напишем сам класс Block:

class Block:

def __init__(self, master):

   self.ent = Entry(master, width=20)

   self.but = Button(master,

                     text="Преобразовать")

   self.lab = Label(master,

                    bg='black', fg='white')

   self.but['command'] = self.str_to_sort

   self.ent.pack()

   self.but.pack()

   self.lab.pack()

 

def str_to_sort(self):

   s = self.ent.get()

   s = s.split()

   s.sort()

   self.lab['text'] = ' '.join(s)

Здесь виджеты являются значениями полей объекта типа Block, функция-обработчик события нажатия на кнопку устанавливается не с помощью метода bind, а с помощью свойства кнопки command. В этом случае в вызываемой функции не требуется параметр event. В метод мы передаем только сам объект.

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

Тогда можно передавать значения для свойства command в конструктор. Значение будет представлять собой привязываемую к кнопке функцию-обработчик события. Полный код программы:

from tkinter import *

 

 

class Block:

def __init__(self, master, func):

   self.ent = Entry(master, width=20)

   self.but = Button(master,

                     text="Преобразовать")

   self.lab = Label(master,

                    bg='black', fg='white')

   self.but['command'] = eval('self.' + func)

   self.ent.pack()

   self.but.pack()

   self.lab.pack()

 

def str_to_sort(self):

   s = self.ent.get()

   s = s.split()

   s.sort()

   self.lab['text'] = ' '.join(s)

 

def str_reverse(self):

   s = self.ent.get()

   s = s.split()

   s.reverse()

   self.lab['text'] = ' '.join(s)

 

 

root = Tk()

 

first_block = Block(root, 'str_to_sort')

second_block = Block(root, 'str_reverse')

 

root.mainloop()

 

Функция eval преобразует строку в исполняемый код. В результате получается self.but['command'] = self.str_to_sort_list или self.but['command'] = self.str_reverse.

При выполнения этого кода в окне будут выведены два однотипных блока, кнопки которых выполняют разные действия.

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

Практическая работа

Напишите простейший калькулятор, состоящий из двух текстовых полей, куда пользователь вводит числа, и четырех кнопок "+", "-", "*", "/". Результат вычисления должен отображаться в метке. Если арифметическое действие выполнить невозможно (например, если были введены буквы, а не числа), то в метке должно появляться слово "ошибка".

 


Поделиться с друзьями:

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.057 с.