Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow Основы алгоритмизации и программирования на Python

Создание формы и виджетов Кнопка, Текстовое поле, Надпись

Итак, создадим окно Windows, имеющее заголовок и определенные размеры (рис. 170). Для этого напишем программу, код которой представлен в листинге 171.

Листинг 171

from tkinter import * root = Tk()

гооМШе("Создание окна") root.geometry("300x200")

root.mainloopQ_

В первой строке программного кода мы объявили модуль tkinter инструкцией from tkinter import*. Во второй строке происходит обращение к классу Тк() библиотеки tkinter, и создается базовое окно. Переменную, связанную с объектом-окном, принято называть root, хотя делать это не обязательно. Понятно, что в третьей строке мы задали название заголовка окна, а в четвертой - установили его размеры. В последней строке вызываем метод mainloop(), чтобы начать событийный цикл базового окна.

Созданное окно

Рис. 170. Созданное окно

Теперь создадим на форме кнопку, при щелчке на которой будет появляться сообщение: «Привет, мир!» (листинг 172). Начало программы совпадает с предыдущим кодом. Далее оператором app=Frame(root) создается рамка, внутри которой могут располагаться другие элементы управления (их, как было отмечено ранее, еще называют виджетами). Метод grid() связан с менеджером размещения, о котором пойдет речь позже. Для того чтобы щелчок на кнопке вызывал сообщение, напишем функцию vivod(). После этого создаем экземпляр объекта Button, в параметрах которого, в частности, указываем высоту и ширину кнопки, ее название, а также привязку к вышеопределенной функции-обработчику vivodQ.

Листинг 172

from tkinter import * root = Tk()

гоо1.Ш1е("Создание окна") root.geometry("300x200") app=F rame(root) app.grid() def vivod():

print ("Привет, мир!")

btn=Button(app,text="Ok",width=20,height=5,command=vivod)

btn.grid()

root.mainloopQ_

Результат работы программы представлен на рис. 171, 172.

$ Создание окна ? J @

і Ok

Рис. 171. Виджет «Кнопка», созданный на форме

f

j? *Python 3.5.1 Shell*

File Edit

Shell

Debug

Options Window Help

Python

3.5.1

(v3.5.

1:37aQ7cee5969, Dec 6 2015,

01:33:43) [MSC v.1900 32 bit (Intel)] on Win32 Type "copyright", "credits” or "license))" for more information.

»>

RESTART: C: /Users/Cepre^AppData/Local/Program з/Python/Python35-32/My_Frоject/tkinter/Создани e окна.ру Привет, мир!

Ln: 5

Рис. 172. Результат выполнения щелчка на кнопке

В предыдущей главе пособия мы познакомились с разработкой программ, в основе которых лежат принципы ООП. Теперь эти знания должны пригодиться нам при создании событийно-ориентированных приложений. Перепишем код предыдущей программы, организовав соответствующий класс (листинг 173).

Листинг 173

from tkinter import * class Application(Frame): def_init_(self,fr):

super( Application,self)._init_(fr) #Инициализация рамки

self.grid()

self.widget()

def vivod(self):

print ("Привет, мир!")

def widget(self): #3адаем параметры кнопки

self.btn=Button(self) self.btn["text"]="Ok" self.btn["command"]=self.vivod self.btn["width"]=30 self.btn["height"]= 10 self.btn.grid(row=2,column=2) self.lbl=Label(self,text="nepBoe GUI-приложение") self.lbl.grid(row=0,column=0)

root = Tk()

root.title("Co3flaHHe окна")

root.geometry("500x500")

app=Application(root)

root.mainloopQ_

Результат выполнения программы, с точки зрения создания виджетов label и button, представлен на рис. 173.

ij? Создание окна

Первое GUI-приложение

Результат выполнения программы

Рис. 173. Результат выполнения программы

В методе grid(), который используется в операторах self.btn.grid(row=2, column=2) и self.lbl.grid(row=0,column=0), указаны два параметра row и col. Они определяют положение объектов label и button относительно родительского элемента управления. Рамку базового окна можно представить как сетку, левый верхний угол которой соответствует координатам 0,0. Таким образом, указывая значения row и col, можно передвигать виджет по сетке. Заметим, что проще попробовать эти действия на практике, чем пытаться виртуально представить некие координаты смещения виджетов.

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

r1

(j? Проверка пароля

-IJ5LI —

Введите пароль

123

Ok

Пароль вере:-^

Рис. 174. Интерфейс программы

В нижеприведенном коде (листинг 174) основным является метод proverka(), с помощью которого мы получим соответствующее сообщение. В нем находятся два новых для нас оператора: parol=self.textbox.get() и self.textbox2.insert(0.0,pr). С помощью метода get(), который применяется относительно текстового окна, мы «забираем» находящийся в нем текст, т. е. в нашем случае строку с паролем. Во втором операторе метод insert() позволит вставить текст, а именно, «Пароль верен» или «Пароль неверен», во второе текстовое окно, поскольку он будет содержаться в ячейке рг. Указание значения 0.0 в качестве параметра метода insert() отвечает за вставку текста в начало текстового окна.

Листинг 174

from tkinter import * class Application(Frame):

def_init_(self,fr):

super( Application, self)._init_(fr)

self.grid()

_self.widgetQ_

#Создаем метод для проверки пароля, введенного пользователем def proverka(self):

parol=self.textbox.get() if parol="123": рг="Пароль верен" else:

рг="Пароль неверен" self.textbox2.insert(0.0,pr)

#Создаем элемент Надпись def widget(self):

self.lbl=Label(self,text="BBeflHTe пароль") self.lbl.grid(row=0,eolumn=0)

#Создаем текстовое поле для ввода пароля self.textbox=Entry(self) self, textbox. grid(row= 1 ,column=0)

#Создаем кнопку

self.btn=Button(self)

self.btn["text"]="Ok"

self.btn["command"]=self.proverka #Указываем имя метода

self.btn["width"]=10

self.btn["height"]=2

self.btn.grid(row=2,column=0)

#Создаем текстовое поле для вывода в него ответа self.textbox2=Text(self,width=35,height=5) self.textbox2.grid(row=2,column=l)

root = Тк()

root.title("ripoBepKa пароля")

root.geometry("500x400")

app=Application(root)

root.mainloopQ_

 
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Пред   СОДЕРЖАНИЕ   След >
 
Популярные страницы