Рубрики
Без рубрики

Как построить калькулятор GUI, используя Tkinter в Python?

В этой статье сегодня мы узнаем, как создать простой калькулятор GUI, используя TKinter. Мы поймем весь код шаг за шагом.

Автор оригинала: Pankaj Kumar.

В этой статье сегодня мы узнаем, как создать простой калькулятор GUI, используя TKinter. Мы поймем весь код шаг за шагом.

Начало работы с нашим калькулятором GUI, используя Tkinter

Прежде чем мы начнем, убедитесь, что у вас есть библиотека TKinter, установленная для Python. Tkinter – это стандартная библиотека GUI для языка программирования Python. Когда Python объединяется с TKinter, он обеспечивает быстрый и простой способ создания приложений графического пользовательского интерфейса.

TKINTER предоставляет мощный объектно-ориентированный интерфейс для TK GUI Toolkit. Если TKINTER не установлен в вашем Python, откройте Windows CMD и введите следующую команду.

pip install python-tk

Tkinter Modelbox.

MessageBox – виджет в библиотеке Tkinter Python. Он используется для отображения ящиков сообщений в приложениях Python. Этот модуль используется для отображения сообщения с использованием определенного количества функций.

Синтаксис:

messagebox.Name_of_the_function(title,message[, options]) 

Параметры :

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

    1. По умолчанию: Эта опция используется для указания кнопки по умолчанию, например, Abort, Retry, или игнорировать в поле «Сообщение».
    2. Родитель: Эта опция используется для указания окна сверху, которое должен отображаться окно сообщения.

Структура калькулятора GUI с использованием Tkinter

Калькулятор

Python Tkinter Label: Этикетка используется для указания коробки контейнера, где мы можем разместить текст или изображения. Этот виджет используется для предоставления сообщения пользователям о других виджетах, используемых в приложении Python.

Падры Python: Рамка – это только виджет. Рамы в Python – это не что иное, как простые контейнеры для его дочерних элементов. Используя их, мы можем дать дочерним контейнерам Mainframes, и мы можем разделить всю рамку макета по кадрам.

Предположим, мы запустим программу, у нас есть метка в начале, а затем несколько кнопок в корневом окне. Мы можем разделить эту часть корневой окна с помощью детали E.g этикетка как одна часть, а затем кнопки в разную часть. Если мы поместим эти части в один кадр, то этот кадр станет родительским элементом. Это поможет нам упростить сложный дизайн.

После добавления кадров структура калькулятора будет похожа:

  1. Этикетка
  2. Рамка 1: 4 кнопки
  3. Рамка 2: 4 кнопки
  4. Рамка 3: 4 кнопки
  5. Рамка 4: 4 кнопки

Кнопки Python: Виджет кнопки используется для добавления кнопок в приложении Python. Эти кнопки могут отображать текст или изображения, которые передают цели кнопок. Вы можете прикрепить функцию или метод к кнопке, которая называется автоматически при нажатии кнопки.

1. Определение функций

Здесь мы начнем с кодировки для кнопок.

val=""
A = 0
operator=""

def btn_1_isclicked():
    global val
    #Concatinate string value 1 with the val and store it in the variable val again
    val = val + "1"
    data.set(val)

Мы определим первую функцию имени btn_1_isclicked () Отказ Мы даем это ущербное имя, так что нам становится легче понять, что функция на самом деле делает только что посмотрела на нее.

Здесь мы хотим, когда мы нажимаем на любую кнопку номера, мы хотим, чтобы это число было отображаться на нашей этикетке и хранить его в другой переменной, чтобы она была легко рассчитана.

Мы принимаем переменную глобально, чтобы избежать проблемы с именем переменной. В Python переменная, объявленная вне функции или в глобальном объеме, известна как глобальная переменная.

Это означает, что Глобальная переменная Доступ к доступу внутри или снаружи функции. Валь вот глобальная переменная. В приведенном выше коде мы создали Val в качестве глобальной переменной и определенной btn_1_isclicked () Чтобы распечатать глобальную валюту VAL и хранить его значение.

Выполните те же шаги для всех кнопок TKINTER.

#import the necessary libraries
import tkinter
from tkinter import *
from tkinter import messagebox

val=""
A = 0
operator=""

def btn_1_isclicked():
    global val
    val = val + "1"
    data.set(val)

def btn_2_isclicked():
    global val
    val = val + "2"
    data.set(val)

def btn_3_isclicked():
    global val
    val = val + "3"
    data.set(val)

def btn_4_isclicked():
    global val
    val = val + "4"
    data.set(val)

def btn_5_isclicked():
    global val
    val = val + "5"
    data.set(val)

def btn_6_isclicked():
    global val
    val = val + "6"
    data.set(val)

def btn_7_isclicked():
    global val
    val = val + "7"
    data.set(val)

def btn_8_isclicked():
    global val
    val = val + "8"
    data.set(val)

def btn_9_isclicked():
    global val
    val = val + "9"
    data.set(val)

def btn_0_isclicked():
    global val
    val = val + "0"
    data.set(val)

def btn_add_clicked():
    global A
    global operator
    global val
    A = int(val)
    operator = "+"
    val = val + "+"
    data.set(val)

def btn_sub_clicked():
    global A
    global operator
    global val
    A = int(val)
    operator = "-"
    val = val + "-"
    data.set(val)

def btn_mul_clicked():
    global A
    global operator
    global val
    A = int(val)
    operator = "*"
    val = val + "*"
    data.set(val)

def btn_div_clicked():
    global A
    global operator
    global val
    A = int(val)
    operator = "/"
    val = val + "/"
    data.set(val)

def btn_equal_clicked():
    global A
    global operator
    global val
    A = int(val)
    operator = "="
    val = val + "="
    data.set(val)

def C_pressed():
    global A
    global operator
    global val
    val = ""
    A=0
    operator=""
    data.set(val)


def result():
    global A
    global operator
    global val
    val2 = val
    if operator == "+":
        x=int((val2.split("+")[1]))
        c = A + x
        data.set(c)
        val=str(c)
    elif operator == "-":
        x=int((val2.split("-")[1]))
        c = A - x
        data.set(c)
        val=str(c)
    elif operator == "*":
        x=int((val2.split("*")[1]))
        c = A * x
        data.set(c)
        val=str(c)
    elif operator == "/":
        x=int((val2.split("/")[1]))
        if x==0:
            messagebox.show("Error","Division by 0 Not Allowed")
            A==""
            val=""
            data.set(val)
        else:
            c=int(A/x)
            data.set(c)
            val=str(c)

2. Создание окна для нашего калькулятора GUI с помощью TKinter

Чтобы инициализировать TKinter, мы должны создать виджет TK CORT, который является окном с строкой заголовка и другие украшения, предоставляемые оконным менеджером.

Корневое окно – это главное окно приложения в наших программах. У него есть заголовка и границы.

Они предоставляются оконным менеджером. Он должен быть создан перед любыми другими виджетами.

Геометрия Метод устанавливает размер для окна и позиционирует его на экране. Первые два параметра являются ширина и высота окна. Последние два параметра являются координатами экрана x и y.

По установке root.Resizable до (0,0) программатор не сможет изменить размер окна. Лучше использовать root.resizable (0,0), потому что он сделает калькулятор на месте.

#create a root window
root = tkinter.Tk()
#set geometry
root.geometry("250x400+300+300")
#disable the resize option for better UI
root.resizable(0,0)
#Give the tiltle to your calculator window
root.title("AskPython-Cal")

3. Настройка форматирования метки

Метка – это окно дисплея, где вы можете разместить текст или изображения. Текст, отображаемый этим виджетом, может быть обновлен в любое время. Также можно подчеркнуть часть текста (например, для идентификации сочетания клавиш) и охватить текст по нескольким строкам.

Родитель ярлыка является корнем. Это означает, что он не будет ограничен на один кадр, но целое root Window. Затем мы поставим простой текст, который мы будем динамически изменяться по всему коду до цифровых кнопок, которые мы нажимаем, отображается на метке.

Tkinter Stringvar Помогите вам управлять значением виджета, такого как метку или запись более эффективно. Контейнер – это виджет, который Stringvar объект, связанный с. Если вы пропустите контейнер, он по умолчанию для корневого окна значение – это начальное значение, которое по умолчанию по умолчанию для пустой строки.

Якорь : Он контролирует, где текст расположен, если виджет имеет больше места, чем потребности в тексте. По умолчанию (виджет будет размещен в правом нижнем углу рамки).

TextVariable: Чтобы иметь возможность извлечь текущий текст из вашего въезда в виджете, вы должны установить эту опцию в экземпляр данных stringvar класса I.e

#Label
data= StringVar()
lbl=Label(
    root,
    text="Label",
    anchor=SE,
    font=("Verdana",20),
    textvariable=data,
    background="#ffffff",
    fg="#000000",
)
#expand option deals with the expansion of parent widget.
lbl.pack(expand=True,fill="both",)

4. Упаковка кнопок на окне

Рамка – виджет в Python. Это очень важно для процесса группировки и организации других виджетов как-то дружелюбным способом. Он работает как контейнер, который отвечает за организацию положения других виджетов.

Он использует прямоугольные зоны на экране для организации макета и обеспечить прокладку этих виджетов.

Рамка также может использоваться в качестве класса фундамента для реализации сложных виджетов.

Мы даем имя переменной к славе как BTNROW1 Отказ Синтаксис для кадра:

variable_name=Frame(parent_window,options..)
  • Parent_window – root представляет родительское окно здесь в нашем коде.
  • Варианты – Вот список наиболее часто используемых вариантов нашего кода. Эти опции могут быть использованы в качестве пар ключа, разделенные запятыми.
  • BG : Нормальный цвет фона отображается за этикеткой и индикатором.

Затем мы упаковываем кадр. Повторите одни и те же шаги для трех трех кадров, вызывая корневое окно.

#Frame Coding for Buttons
#Frame for root window
#Frame 1
btnrow1=Frame(root,bg="#000000")
#If frame gets some space it can expand
btnrow1.pack(expand=True,fill="both",)

#Frame 2
btnrow2=Frame(root)
btnrow2.pack(expand=True,fill="both",)

#Frame 3
btnrow3=Frame(root)
btnrow3.pack(expand=True,fill="both",)

#Frame 4
btnrow4=Frame(root)
btnrow4.pack(expand=True,fill="both",)

5. Добавление кнопок в наш калькулятор GUI с помощью TKinter

Виджет кнопки используется для добавления кнопок в нашем калькуляторе GUI, используя библиотеку Tkinter в Python. Эти кнопки могут отображать текст или изображения, которые передают цели кнопок. Вы можете прикрепить функцию или метод к кнопке, которая называется автоматически при нажатии кнопки.

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

команда Является ли функция или метод, который будет называться, когда кнопка нажала. Здесь мы называем Команда, Функция, которую мы создали ранее, чтобы выполнить задачу.

Мы следуем тому же методу для других кнопок тоже.

#Button row One
#Button 1
btn1=Button(
    btnrow1,
    text = "1",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_1_isclicked,
)
#Buttons will be side by side
btn1.pack(side=LEFT,expand=True,fill="both",)

#Button 2
btn2=Button(
    btnrow1,
    text = "2",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_2_isclicked,
)
#Buttons will be side by side
btn2.pack(side=LEFT,expand=True,fill="both",)

#Button 3
btn3=Button(
    btnrow1,
    text = "3",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_3_isclicked,
)
#Buttons will be side by side
btn3.pack(side=LEFT,expand=True,fill="both",)

#Button add
btnadd=Button(
    btnrow1,
    text = "+",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_add_clicked,
)
#Buttons will be side by side
btnadd.pack(side=LEFT,expand=True,fill="both",)

#Button row Two
#Button 4
btn4=Button(
    btnrow2,
    text = "4",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_4_isclicked,
)
#Buttons will be side by side
btn4.pack(side=LEFT,expand=True,fill="both",)

#Button 5
btn5=Button(
    btnrow2,
    text = "5",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_5_isclicked,
)
#Buttons will be side by side
btn5.pack(side=LEFT,expand=True,fill="both",)

#Button 6
btn6=Button(
    btnrow2,
    text = "6",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_6_isclicked,
)
#Buttons will be side by side
btn6.pack(side=LEFT,expand=True,fill="both",)

#Button Subtraction
btnsub=Button(
    btnrow2,
    text = "-",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_sub_clicked,
)
#Buttons will be side by side
btnsub.pack(side=LEFT,expand=True,fill="both",)

#Button row Three
#Button 7
btn7=Button(
    btnrow3,
    text = "7",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_7_isclicked,
)
#Buttons will be side by side
btn7.pack(side=LEFT,expand=True,fill="both",)

#Button 8
btn8=Button(
    btnrow3,
    text = "8",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_8_isclicked,
)
#Buttons will be side by side
btn8.pack(side=LEFT,expand=True,fill="both",)

#Button 9
btn9=Button(
    btnrow3,
    text = "9",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_9_isclicked,
)
#Buttons will be side by side
btn9.pack(side=LEFT,expand=True,fill="both",)

#Button Multiply
btnmul=Button(
    btnrow3,
    text = "*",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_mul_clicked,
)
#Buttons will be side by side
btnmul.pack(side=LEFT,expand=True,fill="both",)

#Button row Four
#Button C
btnC=Button(
    btnrow4,
    text = "C",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = C_pressed,
)
#Buttons will be side by side
btnC.pack(side=LEFT,expand=True,fill="both",)

#Button 0
btn0=Button(
    btnrow4,
    text = "0",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_0_isclicked,
)
#Buttons will be side by side
btn0.pack(side=LEFT,expand=True,fill="both",)

#Button Equal to
btnequal=Button(
    btnrow4,
    text = "=",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command=result,
)
#Buttons will be side by side
btnequal.pack(side=LEFT,expand=True,fill="both",)

#Button Divide
btndiv=Button(
    btnrow4,
    text = "/",
    font = ("Verdana",22),
    relief =GROOVE,
    border=0,
    command = btn_div_clicked,
    
)
#Buttons will be side by side
btndiv.pack(side=LEFT,expand=True,fill="both",)


root.mainloop()

Наконец, мы входим в MainLoop. Обработка событий начинается с этого момента. MainLoop получает события из оконной системы и отправляет их в виджеты приложений. Он прекращается, когда мы нажимаем на кнопку закрытия заголовка или вызовите Quit () метод.

Кал

Заключение

В этой статье мы покрыли кнопки TKINT, кадры, этикетки и его функциональные возможности, окна TKinter, входные коробки и то, как все эти все могут быть собраны для создания приложений GUI. Понимая код, мы добились успеха в создании рабочего калькулятора GUI с использованием библиотеки TKinter и его виджетов. Надеюсь, эта статья поможет.

Спасибо и счастливого изучения!