Модуль tkinter. Урок №3 — Проект «Сложение двух чисел»
На этом уроке мы создадим приложение, которое будет находить произведение двух чисел. Нам понадобятся две метки, три текстовых поля и одна кнопка
1. Создадим графический интерфейс:
from tkinter import * root=Tk() # создаем главное окно root.title('Произведение двух чисел') Label(root,text='Первое число').pack() # создаем метку и сразу размещаем EntryA=Entry(root,width=10,font='Arial 16') # создаем текстовое поле ввода EntryA.pack() # размещаем в главно окне методом pack() Label(root,text='Второе число').pack() EntryB=Entry(root,width=10,font='Arial 16') EntryB.pack() EntryC=Entry(root,width=20,font='Arial 16') EntryC.pack() but=Button(root,text='Произведение') but.pack() # размещаем кнопку в главном окне root.mainloop() # цикл прорисовки окна
После запуска вы должны увидеть следующее окно приложения:
Согласитесь, выглядит не очень симпатично. Что поделать, метод размещения виджетов pack() в данном случае нам не подходит.
2. Метод размещения Grid
С помощью этого способа мы можем разместить виджеты по сетке, состоящей из столбцов и строк. Можно объединять столбцы и строки, указывать выравнивание элементов.
Если внимательно посмотреть рисунок в начале этого урока, то вы можете заметить, что окно нашего приложения состоит из 4 строк и 2 столбцов, причем некоторые ячейки объединены.
3. Перепишем нашу программу с использованием Grid:
from tkinter import * root = Tk() root.title('Произведение двух чисел') # первая метка в строке 0, столбце 0 (0 по умолчанию) # парамет sticky означает выравнивание. W, E,N,S — запад, восток, север, юг Label(root, text='Первое число').grid(row=0, sticky=W) # вторая метка в строке 1 Label(root, text='Второе число').grid(row=1, sticky=W) # создаем виджеты текстовых полей EntryA = Entry(root, width=10, font='Arial 16') EntryB = Entry(root, width=10, font='Arial 16') EntryC = Entry(root, width=20, font='Arial 16') # размещаем первые два поля справа от меток, второй столбец (отсчет от нуля) EntryA.grid(row=0, column=1, sticky=E) EntryB.grid(row=1, column=1, sticky=E) # третье текстовое поле ввода занимает всю ширину строки 2 # columnspan — объединение ячеек по столбцам; rowspan — по строкам EntryC.grid(row=2, columnspan=2) # размещаем кнопку в строке 3 во втором столбце but = Button(root, text='Произведение') but.grid(row=3, column=1, sticky=E) root.mainloop()
После запуска мы увидим правильно оформленное окно:
Осталось написать функцию, вычисляющую произведение чисел и привязать к кнопке.
4. Напишем функцию обработчик нажатия кнопки:
Эту функцию необходимо разместить до создания кнопки.
def proizv(): a = EntryA.get() # берем текст из первого поля a = int(a) # преобразуем в число целого типа b = EntryB.get() b = int(b) result = str(a * b) # результат переведем в строку для дальнейшего вывода EntryC.delete(0, END) # очищаем текстовое поле полностью EntryC.insert(0, result) # вставляем результат в начало
5. Привяжем нажатие кнопки с функцией (добавьте команду для кнопки):
but = Button(root, text='Произведение', command=proizv)
Задание 1:
Добавьте кнопки вычисления суммы, разности и вычисления частного (деление).
Задание 2:
Напишите программу, складывающую целые числа в одной из компьютерных систем:
Подсказки:
1) функция int(строка,2) преобразует преобразует исходную строку, представляющую двоичное число в целое десятичное число.
Например, int('101',2) (результат 5)
2) Для обратного преобразования десятичного числа можно использовать встроенные функции, результатом которых будет строка:
hex(18) (результат 0x12)
oct(25) (результат 0o31)
bin(17) (результат 0b10001)