here I am struggling with a tkinter problem for a calculator and I thought someone could help so i an being specific with the codes marked problems

Question:

*my que was not over so here i am marking my problems in the code so you can see what can be the solution with square root function
I used

def button_sqrt():
        first_number = e.get()
        global f_num
        global math
        math = "sqrt"
        f_num = int(first_number)
        e.delete(0, END),

if math == "sqrt":
            e.insert(0, f_num * int(second_number))

this but it is not working

#starting

    from tkinter import *

    root = Tk()
    root.title("Simple Calculator")

    e = Entry(root, width=35, borderwidth=5)
    e.grid(row=0, column=0, columnspan=4, padx=11, pady=11,)

#add buttons

    def button_click(number):
        current = e.get()
        e.delete(0, END)
        e.insert(0, str(current) + str(number))

    def button_clear():
        e.delete(0, END)

    def button_add():
        first_number = e.get()
        global f_num
        global math
        math = "addition"
        f_num = int(first_number)
        e.delete(0, END)

    def button_equal():
        second_number = e.get()
        e.delete(0, END)
    
        if math == "addition":
            e.insert(0, f_num + int(second_number))

        if math == "subtraction":
            e.insert(0, f_num - int(second_number))

        if math == "multiplication":
            e.insert(0, f_num * int(second_number))

        if math == "division":
            e.insert(0, f_num / int(second_number))

I want to add a square root function here

#remaining buttons def

    def button_subtract():
        first_number = e.get()
        global f_num
        global math
        math = "subtraction"
        f_num = int(first_number)
        e.delete(0, END)

    def button_multiply():
        first_number = e.get()
        global f_num
        global math
        math = "multiplication"
        f_num = int(first_number)
        e.delete(0, END)

    def button_divide():
        first_number = e.get()
        global f_num
        global math
        math = "division"
        f_num = int(first_number)
        e.delete(0, END)

and one here button for square root

# define buttons

    button_1 = Button(root, text=" 1 ", padx=41, pady=20, command=lambda: button_click(1))
    button_2 = Button(root, text=" 2 ", padx=41, pady=20, command=lambda: button_click(2))
    button_3 = Button(root, text=" 3 ", padx=41, pady=20, command=lambda: button_click(3))
    button_4 = Button(root, text=" 4 ", padx=41, pady=20, command=lambda: button_click(4))
    button_5 = Button(root, text=" 5 ", padx=41, pady=20, command=lambda: button_click(5))
    button_6 = Button(root, text=" 6 ", padx=41, pady=20, command=lambda: button_click(6))
    button_7 = Button(root, text=" 7 ", padx=41, pady=20, command=lambda: button_click(7))
    button_8 = Button(root, text=" 8 ", padx=41, pady=20, command=lambda: button_click(8))
    button_9 = Button(root, text=" 9 ", padx=41, pady=20, command=lambda: button_click(9))
    button_0 = Button(root, text=" 0 ", padx=41, pady=20, command=lambda: button_click(0))
    button_add = Button(root, text=" + ", padx=40, pady=20, command=button_add)
    button_equal = Button(root, text=" = ", padx=90, pady=20, command=button_equal)
    button_clear = Button(root, text="  Clear ", padx=80, pady=20, command=button_clear)

    button_subtract = Button(root, text=" - ", padx=41, pady=20, command=button_subtract)
    button_multiply = Button(root, text=" * ", padx=41, pady=20, command=button_multiply)
    button_divide = Button(root, text=" / ", padx=41, pady=20, command=button_divide)

button for square root here

# put the buttons on the screen

    button_1.grid(row=3, column=0)
    button_2.grid(row=3, column=1)
    button_3.grid(row=3, column=2)

    button_4.grid(row=2, column=0)
    button_5.grid(row=2, column=1)
    button_6.grid(row=2, column=2)

    button_7.grid(row=1, column=0)
    button_8.grid(row=1, column=1)
    button_9.grid(row=1, column=2)

    button_0.grid(row=4,column=0)
    button_clear.grid(row=4, column=1, columnspan=2)
    button_add.grid(row=5, column=0)
    button_equal.grid(row=5, column=1, columnspan=2)

    button_subtract.grid(row=6, column=0)
    button_multiply.grid(row=6, column=1)
    button_divide.grid(row=6, column=2)

and a button on screen for square root here

root.mainloop()
Asked By: Allen The One

||

Answers:

Since square root only needs a single value in order to calculate, you wouldn’t want to add the logic to the button_equal function like you do with the other operators. Instead you keep all the logic inside of your sqrt_button.

for example:

from tkinter import *

root = Tk()
root.title("Simple Calculator")

e = Entry(root, width=35, borderwidth=5)
e.grid(row=0, column=0, columnspan=4, padx=11, pady=11,)

#  add buttons


def button_click(number):
    current = e.get()
    e.delete(0, END)
    e.insert(0, str(current) + str(number))

def button_clear():
    e.delete(0, END)

def button_add():
    first_number = e.get()
    global f_num
    global math
    math = "addition"
    f_num = int(first_number)
    e.delete(0, END)

def button_equal():
    second_number = e.get()
    e.delete(0, END)

    if math == "addition":
        e.insert(0, f_num + int(second_number))

    if math == "subtraction":
        e.insert(0, f_num - int(second_number))

    if math == "multiplication":
        e.insert(0, f_num * int(second_number))

    if math == "division":
        e.insert(0, f_num / int(second_number))

# remaining buttons def

def button_subtract():
    first_number = e.get()
    global f_num
    global math
    math = "subtraction"
    f_num = int(first_number)
    e.delete(0, END)

def button_multiply():
    first_number = e.get()
    global f_num
    global math
    math = "multiplication"
    f_num = int(first_number)
    e.delete(0, END)

def button_divide():
    first_number = e.get()
    global f_num
    global math
    math = "division"
    f_num = int(first_number)
    e.delete(0, END)

def button_sqrt():
    first_number = e.get()
    global f_num
    global math
    math = "sqrt"
    f_num = int(first_number)
    e.delete(0, END)
    e.insert(0, f_num ** .5)


# define buttons

button_1 = Button(root, text=" 1 ", padx=41, pady=20, command=lambda: button_click(1))
button_2 = Button(root, text=" 2 ", padx=41, pady=20, command=lambda: button_click(2))
button_3 = Button(root, text=" 3 ", padx=41, pady=20, command=lambda: button_click(3))
button_4 = Button(root, text=" 4 ", padx=41, pady=20, command=lambda: button_click(4))
button_5 = Button(root, text=" 5 ", padx=41, pady=20, command=lambda: button_click(5))
button_6 = Button(root, text=" 6 ", padx=41, pady=20, command=lambda: button_click(6))
button_7 = Button(root, text=" 7 ", padx=41, pady=20, command=lambda: button_click(7))
button_8 = Button(root, text=" 8 ", padx=41, pady=20, command=lambda: button_click(8))
button_9 = Button(root, text=" 9 ", padx=41, pady=20, command=lambda: button_click(9))
button_0 = Button(root, text=" 0 ", padx=41, pady=20, command=lambda: button_click(0))
button_add = Button(root, text=" + ", padx=40, pady=20, command=button_add)
button_equal = Button(root, text=" = ", padx=90, pady=20, command=button_equal)
button_clear = Button(root, text="  Clear ", padx=80, pady=20, command=button_clear)

button_subtract = Button(root, text=" - ", padx=41, pady=20, command=button_subtract)
button_multiply = Button(root, text=" * ", padx=41, pady=20, command=button_multiply)
button_divide = Button(root, text=" / ", padx=41, pady=20, command=button_divide)
button_sqrt = Button(root, text="sqrt", padx=41, pady=20, command=button_sqrt)

button_1.grid(row=3, column=0)
button_2.grid(row=3, column=1)
button_3.grid(row=3, column=2)

button_4.grid(row=2, column=0)
button_5.grid(row=2, column=1)
button_6.grid(row=2, column=2)

button_7.grid(row=1, column=0)
button_8.grid(row=1, column=1)
button_9.grid(row=1, column=2)

button_0.grid(row=4,column=0)
button_clear.grid(row=4, column=1, columnspan=2)
button_add.grid(row=5, column=0)
button_equal.grid(row=5, column=1, columnspan=2)

button_subtract.grid(row=6, column=0)
button_multiply.grid(row=6, column=1)
button_divide.grid(row=6, column=2)
button_sqrt.grid(row=7, column=0)


root.mainloop()

Answered By: Alexander
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.