Эта статья проведет вас через весь процесс разработки графического калькулятора на Python. Если вы читаете эту статью, вы, вероятно, уже знаете, как написать программу-калькулятор на Python. А теперь вы хотите разработать GUI (графический пользовательский интерфейс) для такой программы, чтобы она была более презентабельной и удобной для повторного использования.

Содержание:

  • Вступление
  • Создание главного экрана
  • Добавление строки уравнения
  • Создание кнопок для калькулятора
  • Добавление кнопок в графический интерфейс
  • Назначение действий кнопкам
  • Заключение

Вступление

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

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

Следующее, что я считаю "обязательным" для этого приложения:

  1. Линия уравнения (экран) для отображения действий щелчка и результата.
  2. Кнопки должны иметь значения и быть активными.
  3. Выполняйте математические операции (сложение, вычитание, умножение, деление).
  4. Выполните расчет уравнения (=) и очистите экран ©.

На протяжении всего этого мы будем работать с tkinter, стандартной библиотекой графического интерфейса для Python. Если вам интересно узнать больше о библиотеке и ее функциях, подробное руководство доступно в Интернете.

Основы калькулятора на Python

В качестве первого шага мы собираемся импортировать библиотеку tkinter и определить класс вместе с методом __init__ и оператором выполнения. Это будет наш основной фрейм, поверх которого мы будем добавлять графический интерфейс и функции калькулятора.

Это может показаться сложным для понимания кодом, но мы подробно обсудим, что делает каждая часть, так что откровенно со мной.

Давайте обсудим это шаг за шагом:

Создайте класс Калькулятор (который представляет собой отдельный объект с заданным поведением).

Определите наш первый метод __init__.
Этот метод специфичен для классов Python и действует как конструктор в объектно-ориентированных концепциях. Этот метод вызывается сразу после создания объекта и позволяет классу инициализировать свои атрибуты.

Передайте два аргумента в метод __init__: self и master.
self представляет экземпляр класса , что в основном означает, что __init__ является методом класса Calculator.
master - это локальная переменная, которую мы передаем в __ init__, и он создает виджет верхнего уровня (обычно главное окно приложения). Подробности будут обсуждаться далее.

Создайте ссылку на главное окно приложения self.master = master, чтобы выполнять с ним операции.
Затем добавьте заголовок в наше приложение master.title («Python Калькулятор »)

Добавьте стартер стандартного выполнения if __ name __ == __ ’main’ __. Это стандартная процедура, подробнее вы можете прочитать здесь.

Укажите, что должно произойти, когда мы выполним файл.
Это довольно последовательно, поэтому следуйте логике.
- Сначала мы создаем локальную переменную root и назначаем ей Tk () . Tk () - это класс tkinter, который по сути создает наше главное окно.
- Затем мы создаем другую локальную переменную my_gui и назначаем класс Calculator для is при передаче root в качестве аргумента Калькулятора. По сути, этот шаг создал графический интерфейс, указав классу использовать root, который является Tk () в качестве главного окна.
- Наконец, мы добавляем root. mainloop (), где mainloop () - это метод Tk (), который в основном сообщает приложению ждать событий (щелчков) и соответствующим образом обновлять пользовательский интерфейс.

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

Добавление строки уравнения в калькулятор в Python

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

Эта часть очень интуитивно понятна и требует, чтобы мы добавили только две строки кода в наш метод __init__:

Причина, по которой мы добавляем его в метод __init__, заключается в том, что мы хотим, чтобы он «создавался» сразу после запуска приложения.

Давайте обсудим это шаг за шагом:

Нам нужно создать строку уравнения, которую мы хотим добавить в наш класс Калькулятор, поэтому мы определяем ее как self.equation, а затем используем tkinter класс Entry () для создания виджета.
Есть несколько аргументов, которые входят в класс Entry (). Нам нужно сообщить ему, что оно должно принадлежать нашему главному окну, а также некоторым основным свойствам стиля, таким как ширина и граница (чувствую это можно изменить, но пока следуйте значениям, которые я назначил).

«Поместите» линию уравнения на наш главный экран. Итак, мы создали нашу линию, и она принадлежит классу Калькулятор. Но он еще не знает, где на этом сером экране он должен быть расположен. Должен быть верхний правый угол, нижний левый или где-нибудь еще? Я размещу вверху нашего графического интерфейса. Для этого я буду использовать метод .grid () класса Entry () вместе с некоторыми параметрами.
Итак, мы уже знаем, что он должен быть назначен нашему «отображению», отсюда и форма self.equation.grid ().
Теперь то, что входит в .grid (), требует небольшого пояснения: < br /> - Напомним, что индексирование Python начинается с 0, поэтому первая строка имеет индекс 0, а первый столбец также имеет индекс 0.
- columnspan указывает, сколько «столбцов» будет занимать эта строка. Взгляните на окончательное изображение приложения-калькулятора в разделе «Введение», и вы заметите, что кнопки приложения размещены в 4 столбца. Поскольку наша строка уравнения занимает всю ширину экрана, это означает, что она занимает ровно 4 столбца. Примечание. По этой же причине я выбрал ширину 36, поскольку ее можно разделить на 4 без остатка, не затрагивая макет.
- padx и pady - это базовые отступы, которые я добавляю сверху, снизу, слева и справа от линии, просто чтобы визуально дать ей немного больше места.

Внеся эти дополнения в наш код, вы должны прийти к следующему:

Скопируйте и вставьте приведенный выше код в свой редактор и запустите его. Вы должны увидеть следующее:

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

Создание кнопок для калькулятора на Python

Хорошо, пока у нас есть главный экран нашего калькулятора и экран формул, прикрепленный к нему. Наш следующий шаг - добавить кнопки в этот графический интерфейс, чтобы он выглядел как полноценный калькулятор.

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

Мы собираемся создать новый метод createButton () и добавить к нему следующий код:

Давайте обсудим это шаг за шагом:

Шаг 1.
Определите новый метод createButton () и передайте ему self в качестве аргумента. Это в основном назначает этот метод экземпляру класса Calculator.

Шаг 2.
Создайте объекты-кнопки. Вы заметите, что все кнопки следуют одному и тому же шаблону: b [some name] = self.addButton (some value). Создание каждой кнопки по одной - утомительный процесс, который можно автоматизировать. Чтобы объяснить детали, я жестко закодировал их одну за другой. По сути, каждое имя кнопки представляет действие, которое мы хотим, чтобы эта кнопка выполняла. Например, b9 - это кнопка для 9, b_add - это кнопка для добавления и т. Д.
Теперь возникает вопрос: что такое это self.addButton ()? Это еще один метод, который мы определим позже в коде. По сути, он создает объект-кнопку, который нам нужен, с нужным нам значением. Это будет объяснено в следующем разделе. Общий вход осуществляется для каждой кнопки внутри метода createButton (), мы вызываем метод addButton (), чтобы сгенерировать кнопку.

Шаг 3.
Расположите кнопки в ряды, в которых они появляются на калькуляторе. Мы хотим, чтобы у него было 4 ряда по 4 кнопки в каждой, чтобы они располагались в следующем порядке:
Строка 1: 7, 8, 9, +
Строка 2: 4, 5, 6, -
Строка 3: 1, 2, 3, *
Строка 4: c , 0, =, /

Шаг 4.
Заполните каждую строку кнопками. Теперь, на последнем этапе добавления кнопок, мы, по сути, перебираем каждый столбец в каждой строке и заполняем его кнопками.
Следует помнить, что мы начинаем с индекса строки с 1 по 4 (с r = 1), поскольку индекс нашей строки 0 заполняется уравнением «display».
С другой стороны, наши столбцы будут проиндексированы от 0 до 3.

Это важный шаг, и это не фрагмент кода, показанный выше. Итак, мы создали этот метод для создания кнопок. Теперь, чтобы выполнить его, нам нужно «вызвать» его из нашего метода __init__, добавив к нему self.createButton ().

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

Примечание: если вы попытаетесь запустить его сейчас, вы должны получить сообщение об ошибке. Причина ошибки в том, что мы использовали какой-то метод addButton () внутри нашего метода createButton (), но не указали, что именно он делает. Мы поговорим об этом в следующем разделе.

Добавление кнопок в графический интерфейс

В этом разделе мы будем работать над добавлением созданных нами кнопок в графический интерфейс. Помните метод addButton (), который мы использовали для создания каждой кнопки? Это именно то, на чем мы сейчас сосредоточимся. Этот метод фактически создает и возвращает объект Button tkinter, который мы затем добавляем в графический интерфейс.

Нам помогут следующие несколько строк кода:

Давайте обсудим это шаг за шагом:

Шаг 1.
Определите новый метод addButton () и передайте два аргумента: self и значение. к нему. self назначает этот метод экземпляру класса Calculator, а value - это фактическое «значение», которое мы хотим отображать на каждом из кнопки в нашем графическом интерфейсе.

Мы создаем класс Button с несколькими необходимыми нам параметрами:
- self.master: это назначает объект Button классу Calculator.
- text = value : это отобразит «значение», которое мы передали в качестве аргумента, в виде текста на кнопке.
- width = 9: это просто стиль, и вы можете настроить ширину кнопок.

Теперь давайте добавим его в наш основной код и запустим:

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

Назначение действий кнопкам

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

Давайте посмотрим на кусок кода, который сделает это за нас:

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

Определите новый метод addButton () и передайте ему два аргумента: self и value. self назначает этот метод экземпляру класса Calculator, а value - это фактическое «значение», которое мы хотим отображать на каждом из кнопки в нашем графическом интерфейсе.

Чтобы калькулятор знал, что делать дальше, он должен знать, что отображается в строке уравнения. Чтобы получить содержимое из строки уравнения, мы используем метод .get () строки Equation, который является классом tkinter Entry. < br /> Это означает, что если у вас есть, например, «1 + 1» в строке уравнения, эта функция возьмет эту строку и сохранит ее как строку в локальной переменной current_equation.

Здесь мы начинаем добавлять логику для щелчков, и простейшее из них - какое действие должно выполняться калькулятором в Python, когда пользователь нажимает «c»? Мы бы хотели очистить строку уравнения, если пользователь нажимает «c», и это именно то, что мы делаем, используя метод .delete () в формуле , которая является классом tkinter Entry.

Вторая часть нашей обработки - добавить функциональность, когда пользователь нажимает «=». Мы хотим вычислить ответ и отобразить его в строке уравнения.
- Первое, что мы делаем внутри части elif, - это вычисляем current_equation, которое мы уже есть из шага 1. Мы используем метод Python eval (), который анализирует строковое выражение и «оценивает» его, как если бы вы запускали его напрямую в Python, и сохраняем его как локальную переменную answer . Например, если ваше current_equation равно «1 + 1» и является строкой, если вы запустите 1 + 1 в Python, на выходе вы получите 2. Именно это мы и делаем здесь.
- Затем мы удаляем текущий текст из строки уравнения, используя метод .delete () класса Entry tkinter (аналогично тому, как мы очищали строку, когда пользователь нажал «c»).
- И, наконец, вставьте наш ответ в строку уравнения, используя метод .insert () класса Entry tkinter.

И последний шаг в кондиционировании - добавить то, что мы можем назвать условием «поймать все», которое мы помещаем в часть else. По сути, если пользователь нажимает что-нибудь еще, кроме «c» или «=», это означает, что он нажимает на цифру от 0 до 9 или знак математической операции (+, -, *, /). Все, что мы хотим сделать в этом случае, - это добавить его в нашу строку уравнения.
- Сначала мы удаляем существующий текст в методе .delete () строки уравнения класса Entry tkinter. .
- Затем мы объединяем current_equation со значением value (которое является последним щелчком) и вставляем его в строку уравнения с помощью .insert () метод класса Entry tkinter. Например, если у вас сейчас есть «1+» в строке уравнения, а затем нажмите «1», мы склеиваем «1+» и «1», чтобы получить «1 + 1», и вставляем обратно в линия уравнения.

Дополнительный шаг:
Последний шаг, который нам нужно сделать, - сообщить нашим кнопкам, какое действие принадлежит каждой из них при нажатии. Для этого нам нужно вернуться к нашему методу addButton () и добавить еще один параметр при создании объекта Button (). Нам нужно добавить команду. Команда - это параметр для кнопки, который сообщает ей, что она должна делать, и то, что каждая кнопка, по сути, должна делать, - это использовать метод clickButton () в качестве своего параметра. Поэтому нам нужно изменить код в методе addButton () с:

To:

Теперь, когда наши кнопки созданы, графический интерфейс знает, какое действие назначено на нажатие каждой кнопки.

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

Этот код также доступен на моей странице GitHub.

Заключение

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

Не стесняйтесь оставлять комментарии ниже, если у вас есть какие-либо вопросы или предложения по внесению правок.

Первоначально опубликовано на https://pyshark.com 18 июня 2020 г.