Модуль 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)