Простой калькулятор с графическим интерфейсом

Не могу разобраться как написать программу в которой нужно сделать текстовыми полями (Text), 4 переключателя Radiobutton и кнопкой button. В текстовые поля записываются 2 числа по нажатию на кнопку появляется сообщение в котором написана сумма, разность, произведение, частное двух чисел, в текстовые поля в зависимости от активного переключателя.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Калькулятор с графическим интерфейсом
Напишите программу «Полноценный калькулятор» с графическим пользовательским интерфейсом на PyQT. .
Арифмометр с графическим интерфейсом
Напишите программу «Арифмометр» с графическим пользовательским интерфейсом на PyQT. На форме.

Разработать программу с графическим интерфейсом
Разработать программу со следующим графическим интерфейсом, предусмотреть обработку возможных.
Напишите программу с графическим пользовательским интерфейсом
Условия задачи: Напишите программу с графическим пользовательским интерфейсом на PyQT. При старте.
40 / 42 / 16
Регистрация: 15.01.2021
Сообщений: 432
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
from tkinter import * class Main(Frame): def __init__(self, root): super(Main, self).__init__(root) self.build() def build(self): self.formula = "0" self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF") self.lbl.place(x=11, y=50) btns = [ "C", "DEL", "*", "=", "1", "2", "3", "/", "4", "5", "6", "+", "7", "8", "9", "-", "(", "0", ")", "X^2" ] x = 10 y = 140 for bt in btns: com = lambda x=bt: self.logicalc(x) Button(text=bt, bg="#FFF", font=("Times New Roman", 15), command=com).place(x=x, y=y, width=115, height=79) x += 117 if x > 400: x = 10 y += 81 def logicalc(self, operation): if operation == "C": self.formula = "" elif operation == "DEL": self.formula = self.formula[0:-1] elif operation == "X^2": self.formula = str((eval(self.formula))**2) elif operation == "=": self.formula = str(eval(self.formula)) else: if self.formula == "0": self.formula = "" self.formula += operation self.update() def update(self): if self.formula == "": self.formula = "0" self.lbl.configure(text=self.formula) if __name__ == '__main__': root = Tk() root["bg"] = "#000" root.geometry("485x550+200+200") root.title("Калькулятор") root.resizable(False, False) app = Main(root) app.pack() root.mainloop()
код не мой, я его просто давно скопировал, и у меня лежит. Источник не помню
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Python программа c графическим интерфейсом для Ubuntu
Подскажите пожалуйста, как делаются Python-программы c графическим интерфейсом для Ubuntu? Какие.
Напишите программу с графическим интерфейсом
Напишите программу с графическим интерфейсом. В окне программы должна располагаться надпись: “ВЫ.
Шифрование с графическим интерфейсом в tkinter
Добрый день! Моя задача: основное окно — набор кнопок с выбором нужной функции для кодирования.
Написать приложение с графическим интерфейсом
Если говорить кратко , нужно писать программу , а точнее графический интерфейс по заданию в файле.

Создать программу парсер с графическим интерфейсом
Здравствуйте. Суть программы в том, что она будет брать информацию с сайтов посвященных.
Или воспользуйтесь поиском по форуму:
Простой GUI калькулятор на Python #1. Дизайн приложения

Штош. Наверное, каждый начинающий программист после «Hello, world!» хочет написать какой-нибудь простенький проект. Почти всегда в голову приходит идея создания калькулятора. Но консольный калькулятор — это как-то скучно и просто. Хочется сделать приложение вот прямо как в системе. Ну или хотя бы что-то похожее.
В этой серии статей я научу вас делать простой кроссплатформенный десктопный калькулятор. Здесь не будет тригонометрических функций, процентов, интегралов и других полезных вещей. Вы сможете добавить их по своему желанию.

Мы будем использовать язык Python, фреймворк Qt, библиотеку PySide6, сразу установим её:
pip install PySide6
Qt Designer
Создавать интерфейс мы будем в приложении Qt Designer. Его можно скачать отдельно или найти в папке установленного PySide. Для этого перейдем по пути:
Создаем Main Window, т.е. главное окно приложения.

Сразу убираем ненужные menubar и statusbar.

Название приложения можно изменить в свойстве главного окна windowTitle.

Элементы калькулятора
Перетащим нужные элементы в интерфейс. В нашем калькуляторе будет поле ввода Line Edit.

Label с временным выражением над этим полем ввода.

Grid Layout для кнопок.

Просто закинем эти элементы и выберем Lay Out Vertically для центрального виджета.

Теперь закинем кнопки в Grid Layout, у меня будет 4 колонки и 5 рядов. Чтобы скопировать и вставить элемент, можно перетащить его с зажатой клавишей Ctrl.

Поставим текст во все кнопки. Для Backspace мы позже поставим иконку.


Проставим горячие клавиши для всех кнопок, кроме Clear и отрицания. За это отвечает свойство shortcut. К сожалению, в Qt Designer нельзя указать несколько горячих клавиш для одной кнопки. Хотелось бы, чтобы клавиши «Enter», «Return» и » full-width «>
Запишем 0 в Line Edit и выберем правое горизонтальное выравнивание для текста.

Нам нужно сделать так, чтобы пользователь не мог вводить что попало в это поле, чтобы он мог его только читать. Для этого существует свойство readOnly.

Укажем максимальную длину в 16 символов, как в калькуляторе Windows.

Запишем в лейбл какое-нибудь выражение и поставим правое выравнивание.

Чтобы посмотреть превью дизайна используйте сочетание клавиш Ctrl + R.

Давайте назовем элементы, чтобы в коде было проще обращаться к ним.

Размерная политика элементов
Вы спросите: «Почему интерфейс так плохо выглядит?». Все потому, что у элементов не настроена вертикальная политика. Для лейбла и поля поставим Maximum.
Конечно же не забываем сохранить файл интерфейса. Он имеет расширение ui . Обычно я называю файл design.ui

Для всех кнопок поставим Expanding.

Стилизация калькулятора
Сначала нужно определиться с цветовой палитрой. Я буду использовать 4 цвета:
- Почти черный #121212 для фона.
- Белый #FFF для текста кнопок и поля ввода.
- Серый #666 для фона кнопок при наведении.
- Серый посветлее #888 для текста временного выражения и фона кнопок при нажатии.
В Qt Designer поддерживается язык css. Напишем простенький stylesheet для главного окна. Для всего виджета указываем белый цвет текста и почти черный цвет #121212 для фона.
Я буду использовать бесплатный шрифт Rubik из библиотеки Google Fonts. Он довольно приятный.
QWidget
Давайте посмотрим, что получается.


Давайте изменим кнопки на плоские с прозрачным фоном.
QPushButton
Теперь напишем изменение фона кнопок при наведении и нажатии. При наведении цвет фона будет меняться на серый #666 , при нажатии на серый #888.
QPushButton:hover < background-color: #666; >QPushButton:pressed
Посмотрим на результат.
Стили для Line Edit и Label
Сначала разберемся с Line Edit. Поставим размер шрифта 40pt и уберем границы. Я не буду делать какие-то изменения при наведении и нажатии, потому что пользователь не может взаимодействовать с этим полем.
font-size: 40pt; border: none;

Для лейбла укажем только цвет #888 . С этим элементом пользователь тоже не может взаимодействовать.
color: #888;

Иконки
Теперь зайдем на Google Icons и возьмем черную иконку калькулятора и белую иконку backspace. Я возьму Sharp иконки с размером 24 пикселя. Формат выбирайте на ваше усмотрение. По опыту скажу, что лучше SVG. И лучше оно не только в том, что оно без труда масштабируется без потери качества (векторная графика), но еще и скачивается одним файлом. При скачивании PNG вам нужно будет распаковать архив, зайти в одну из двух папок и вытащить саму иконку.
В статье я скачивал PNG, не делайте так. Я думал, что Qt Designer не поддерживает иконки с векторной графикой, даже не попробовав.


Создадим файл ресурсов:
Resource Browser > Edit Resources > New Resource File.


Я сохранил файл с названием files.qrc . Добавим префикс для иконок.

Закинем туда наши две иконки.

Поставим иконку Backspace:
icon > choose Resource

Поставим размер 24 x 24 пикселя в свойстве iconSize.

То же самое проделаем для иконки приложения.

Финальные штрихи
Почти готово. Убираем текст из лейбла. Ставим размер главного окна. У меня будет 300 на 500 пикселей. Такой же размер поставлю минимальным для приложения.

Еще добавлю такую фичу — курсор «указывающая рука» для кнопок. Поставлю только для одной кнопки, сейчас доделаем в коде.
Редактируем интерфейс в коде
Файл интерфейса представляет собой файл с xml разметкой. Мы можем найти блок кода с указывающей рукой, введя в поиске по коду Pointing

PointingHandCursor
Заметим, что этот блок кода идет после блока размерной политики. Поэтому нам нужно заменить:
0 0 PointingHandCursor
В современных редакторах это сделать очень просто. Например, в VS Code нужно нажать Ctrl + H.
Впишем нужные блоки кода и нажмем Replace All (Ctrl + Alt + Enter).

Проверяем в дизайне.
Дизайн сделан, поздравляю!
Конвертируем файл ресурсов и интерфейса
Для начала нам нужно конвертировать файл ресурсов в питоновский файл. Для этого напишем в терминале:
pyside6-rcc «название файла ресурсов.qrc» > «название файла ресурсов_rc.py»
pyside6-rcc files.qrc > files_rc.py

Теперь конвертируем в Python файл интерфейса. Для этого введем в терминал тот же самый синтаксис, но теперь используем pyside6-uic:
pyside6-uic design.ui > design.py

Если у вас на выходе получаются файлы с кодировкой UTF-16 , конвертируйте их в UTF-8 во избежание дальнейших проблем.


Штош, в следующей статье напишем код для главного функционала калькулятора. До встречи.
Калькулятор
Многие программисты стараются изучать языки программирования с помощью написания достаточно простых программ. Один из вариантов – написание калькулятора. Конечно, можно посчитать в отладчике Python или запустив консоль. Но гораздо лучше написать на python свой калькулятор с графическим интерфейсом.
Считаем в консоле
Чтобы посчитать математические выражения можно запустить консоль. Запустить python. После этого набираем математические выражения и получаем ответ. Для этого даже не надо уметь программировать.

Делаем простой калькулятор
Лучше всего закреплять свои знания по программированию с помощью написания простых программ. Таких приложений можно придумать много – календарь, программа для хранения заметок, получение прогноза погоды.

Можно написать программу, которая делает скриншоты и сохраняет полученные изображения в папку. В любом случае, надо выбрать какое-нибудь не сложное задание, чтобы не закопаться в нем. Потом его можно будет расширить и сделать по-настоящему полезное приложение.
В нашем случае мы разберем, как создать простой графический калькулятор на Python 3. Для реализации графического интерфейса воспользуемся стандартным пакетом Tkinter. Он входит в состав Python 3. Соответственно, если у вас установлен Python, то дополнительно не надо ничего устанавливать.
В первых строках файла calculator.py подключаем библиотечные функции:
- Tkinter для графического интерфейса;
- Decimal для вычислений с большей точность, так как точности float не достаточно.
Импорт библиотек и исходные данные
Создаем окно приложения — объект Tk с заголовком Calculator. Во вложенном кортеже buttons будут храниться обозначения для кнопок. В список stack будем добавлять введенные числа и операции, которые надо совершить. activeStr предназначен для хранения набираемого числа.
from tkinter import * from decimal import * root = Tk() root.title('Calculator') buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) activeStr = '' stack = []
Вычисление результата
Функция calculate получает из списка stack операнды и операцию которую над ними надо произвести. Результат отображается в надписи label. Получать из списка строки будем с помощью метода pop.
def calculate(): global stack global label result = 0 operand2 = Decimal(stack.pop()) operation = stack.pop() operand1 = Decimal(stack.pop()) if operation == '+': result = operand1 + operand2 if operation == '-': result = operand1 - operand2 if operation == '/': result = operand1 / operand2 if operation == '*': result = operand1 * operand2 label.configure(text=str(result))
Обработка нажатия
В функции click выполняется обработка нажатой клавиши. В качестве ее аргумента передается текст, отображаемый на кнопке, которую нажали. Хотелось бы хранить вводимое значение прямо в надписи, а не создавать для этого отдельную переменную. Но так не получается из-за алгоритма работы. После того как посчитан результат, он записывается в надписи. При попытке после этого начать вводить новое число, оно бы дописывало прежний результат.
В списке с операторами и командами для калькулятора не обязательно их будет 3. Но при обработке с помощью метода pop, будут рассматриваться 3 последних введенных значения. А после проведения расчета список очистится. Далее в него добавляется полученный результат, на случай если пользователь нажмет на калькуляторе клавишу операции сразу, а не будет вводить новое число.
def click(text): global activeStr global stack if text == 'CE': stack.clear() activeStr = '' label.configure(text='0') elif '0' = 2: stack.append(label['text']) calculate() stack.clear() stack.append(label['text']) activeStr = '' if text != '=': stack.append(text) else: if text != '=': stack.append(label['text']) stack.append(text) activeStr = '' label.configure(text='0')
Внешний вид
Теперь займемся оформлением внешнего вида калькулятора и зададим обработку нажатия кнопок. Создаем надпись для вывода набираемых значений и результатов. В цикле создаем кнопки. Расположение кнопок и надписи осуществляется в табличном виде с помощью упаковщика grid. И в завершении запускаем цикл обработки событий mainloop.
label = Label(root, text='0', width=35) label.grid(row=0, column=0, columnspan=4, sticky="nsew") button = Button(root, text='CE', command=lambda text='CE': click(text)) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): button = Button(root, text=buttons[row][col], command=lambda row=row, col=col: click(buttons[row][col])) button.grid(row=row + 2, column=col, sticky="nsew") root.grid_rowconfigure(6, weight=1) root.grid_columnconfigure(4, weight=1) root.mainloop()
У надписи выставлена ширина 35, для того, чтобы оформление кнопок подстраивалось под надпись. И в результате кнопки при этом значении лучше выглядят.
Для того, чтобы кнопки правильно работали, пришлось для каждой из кнопок создать свою функцию с помощью lambda.
По аналогии приведенного кода python калькулятора можно сдель, допустим, календарь. Для этого надо будет запрашивать текущую дату у операционной системы. Открывать нужный месяц, рассчитывать какие числа выпадут на понедельники, какой год високосный. Сделать возможность менять год и месяцы.
GUI Калькулятор на Python tkinter

Статьи
Автор Admin На чтение 9 мин Просмотров 9.6к. Опубликовано 02.03.2023
Введение
В ходе статьи напишем GUI калькулятор на языке программирования Python с использованием модуля tkinter.
Написание GUI калькулятора
Для начала импортируем библиотеку tkinter:
from tkinter import *
Создадим объект класса Tk(), укажем разрешение окна 268×288, заголовок «Калькулятор» и запретим возможность изменять разрешение окна:
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) root.mainloop()
Создадим виджет Frame() и отобразим его методом grid():
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") root.mainloop()
Добавим текстовое поле (виджет Entry()) на фрейм, укажем шрифт Arial 15 размера жирного начертания, толщину 24 и запретим возможность писать в нём. Отобразим его методом pack():
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) root.mainloop()
Далее создадим кортеж, в котором будут храниться кнопки будущего калькулятора:
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) root.mainloop()
Создадим пустую переменную expression строкового типа данных. Она нам пригодится для избежания ошибок в будущем. Также добавим кнопку, которая в последующем
будет служить для очищения текстового поля:
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") root.mainloop()
Теперь добавим основные кнопки калькулятора с помощью цикла. И в основном, и во вложенном циклах будет по 4 итерации. Во вложенном цикле создаётся кнопка, с шириной 2, и высотой 3. Текстом будет являться поиндексное значение из кортежа buttons. Команда будет задаваться с помощью анонимной функции lambda, позиционироваться кнопки будут с помощью метода grid():
from tkinter import * root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()
Создадим функцию btn_click(), и в качестве аргумента укажем item. Сделаем переменную expression глобальной, после чего добавим конструкцию try … except:
from tkinter import * def btn_click(item): global expression try: pass except: pass root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()
В try мы даём возможность писать в текстовое поле, приведя параметр state в normal. Далее к expression прибавляем item. И вводим результат в текстовое поле:
from tkinter import * def btn_click(item): global expression try: input_field['state'] = "normal" expression += item input_field.insert(END, item) except: pass root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()
Зададим условие, что если на;ата кнопка «равно», то будет подсчитываться результат методом eval(). После чего результат будет выведен в текстовое поле, а expression обнулится. В конце try снова замораживаем текстовое поле:
from tkinter import * def btn_click(item): global expression try: input_field['state'] = "normal" expression += item input_field.insert(END, item) if item == '=': result = str(eval(expression[:-1])) input_field.insert(END, result) expression = "" input_field['state'] = "readonly" except: pass root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()
В except мы будем ловить ошибку ZeroDivisionError, и говорить, что деление на 0 запрещено.
Также добавим ошибку синтаксиса, при которой будет просто выводиться слово «Ошибка»:
from tkinter import * def btn_click(item): global expression try: input_field['state'] = "normal" expression += item input_field.insert(END, item) if item == '=': result = str(eval(expression[:-1])) input_field.insert(END, result) expression = "" input_field['state'] = "readonly" except ZeroDivisionError: input_field.delete(0, END) input_field.insert(0, 'Ошибка (деление на 0)') except SyntaxError: input_field.delete(0, END) input_field.insert(0, 'Ошибка') root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()
Теперь добавим функцию для очищения текстового поля. Внутри неё делаем переменную expression глобальной, опять же размораживаем текстовое поле, очищаем его, и снова замораживаем:
from tkinter import * def btn_click(item): global expression try: input_field['state'] = "normal" expression += item input_field.insert(END, item) if item == '=': result = str(eval(expression[:-1])) input_field.insert(END, result) expression = "" input_field['state'] = "readonly" except ZeroDivisionError: input_field.delete(0, END) input_field.insert(0, 'Ошибка (деление на 0)') except SyntaxError: input_field.delete(0, END) input_field.insert(0, 'Ошибка') def bt_clear(): global expression expression = "" input_field['state'] = "normal" input_field.delete(0, END) input_field['state'] = "readonly" root = Tk() root.geometry("268x288") root.title("Калькулятор") root.resizable(0, 0) frame_input = Frame(root) frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew") input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly") input_field.pack(fill=BOTH) buttons = (('7', '8', '9', '/', '4'), ('4', '5', '6', '*', '4'), ('1', '2', '3', '-', '4'), ('0', '.', '=', '+', '4') ) expression = "" button = Button(root, text='C', command=lambda: bt_clear()) button.grid(row=1, column=3, sticky="nsew") for row in range(4): for col in range(4): Button(root, width=2, height=3, text=buttons[row][col], command=lambda row=row, col=col: btn_click(buttons[row][col])).grid(row=row + 2, column=col, sticky="nsew", padx=1, pady=1) root.mainloop()

Заключение
В ходе статьи мы с Вами написали код для GUI калькулятора на языке программирования Python с использованием модуля tkinter. Надеюсь Вам понравилась статья, желаю удачи и успехов!