1

I'm working on a GUI for my calculator project. I can't seem to figure out why I keep getting this error. I saw 2 similar questions to what I was doing but they didn't help. These were the questions I saw:1) tkinter TypeError: missing 1 required positional argument: 2) TypeError: grid_configure() missing 1 required positional argument: 'self' None of these questions helped me. Btw this is my error:

C:\Users\Admin\PycharmProjects\venv\Scripts\python.exe 
"C:/Users/Admin/PycharmProjects/pythonProject/Calculator GUI v1.0.py"
Traceback (most recent call last):
 File "C:\Users\Admin\PycharmProjects\pythonProject\Calculator GUI v1.0.py", line 40, in 
<module>
button_addition =       Button(root_var, text="+", padx=50, pady=10, command=button())
TypeError: button() missing 1 required positional argument: 'number'

Process finished with exit code 1

And my code:

import tkinter as Tk
from tkinter import *

root_var = Tk()
root_var.title("Calculator")

e = Entry(root_var, width=25, borderwidth=5)
e.grid(row=0, column=0, columnspan=3, padx=10, pady=10)

def button(number):

e.delete(0, END)
e.insert(0, END)


button_1 = Button(root_var, text="1", padx=50, pady=10, command=lambda:button(1))
button_2 = Button(root_var, text="2", padx=50, pady=10, command=lambda:button(2))
button_3 = Button(root_var, text="3", padx=50, pady=10, command=lambda:button(3))
button_4 = Button(root_var, text="4", padx=50, pady=10, command=lambda:button(4))
button_5 = Button(root_var, text="5", padx=50, pady=10, command=lambda:button(5))
button_6 = Button(root_var, text="6", padx=50, pady=10, command=lambda:button(6))
button_7 = Button(root_var, text="7", padx=50, pady=10, command=lambda:button(7))
button_8 = Button(root_var, text="8", padx=50, pady=10, command=lambda:button(8))
button_9 = Button(root_var, text="9", padx=50, pady=10, command=lambda:button(9))
button_0 = Button(root_var, text="0", padx=50, pady=10, command=lambda:button(0))

button_addition =       Button(root_var, text="+", padx=50, pady=10, command=button())
button_subtraction =    Button(root_var, text="-", padx=50, pady=10, command=button())
button_multiplication = Button(root_var, text="*", padx=50, pady=10, command=button())
button_division =       Button(root_var, text="/", padx=50, pady=10, command=button())
button_exponents =      Button(root_var, text="^", padx=50, pady=10, command=button())

button_equals = Button(root_var, text="=", padx=50, pady=10, command=button())
button_clear =  Button(root_var, text="C", padx=50, pady=10, command=button())




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

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

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

 button_0.grid(row=4, column=0)
 button_addition.grid(row=4, column=1)
   button_subtraction.grid(row=4, column=2)

   button_multiplication.grid(row=5, column=0)
   button_division.grid(row=5, column=1)
   button_exponents.grid(row=5, column=2)

  button_equals.grid(row=5, column=0)
  button_clear.grid(row=5, column=1)

  root_var.mainloop()

(I doubt this will help, but I'm using PyCharm)

E_net4
  • 27,810
  • 13
  • 101
  • 139
  • Your answer @jasonharper did help. The question you posted mentioned the use of lambdas. In my earlier comment, I had tried entering the operator symbol like *, +, -, / in the `command = button())` section of `button_addition = Button(root_var, text="+", padx=50, pady=10, command=button())` section. When I modified it too: `command = lambda:button()) and didn't enter any number in the `button())` thingy, it worked. –  Jun 28 '21 at 05:48
  • 1
    You have used `lambda` for `button_1` to `button_0`, so I wonder why you don't use `lambda` for other buttons as well. – acw1668 Jun 28 '21 at 05:48
  • Yeah. I found that out the hard way lol. Thanks for your help –  Jun 28 '21 at 05:51
  • @acw1668 your answer helped. At least I was able to open my tkinter GUI but when I click on an operator like plus or minus, it throws me the same error –  Jun 28 '21 at 06:01

1 Answers1

0

The code which you provided is not that indented but anyway

from line 27 to 34: You have this code

button_addition =       Button(root_var, text="+", padx=50, pady=10, command=button())
button_subtraction =    Button(root_var, text="-", padx=50, pady=10, command=button())
button_multiplication = Button(root_var, text="*", padx=50, pady=10, command=button())
button_division =       Button(root_var, text="/", padx=50, pady=10, command=button())
button_exponents =      Button(root_var, text="^", padx=50, pady=10, command=button())

button_equals = Button(root_var, text="=", padx=50, pady=10, command=button())
button_clear =  Button(root_var, text="C", padx=50, pady=10, command=button())

The error is there because, when passing the command=button() you are not passing any args

pass args to the button function and you should be good to go

Prathamesh Bhatkar
  • 291
  • 1
  • 4
  • 15
  • 1
    Instead you should use `command = lambda: button(arguments)`. Here lambda expression must be used. Or else, the function runs when you declare it itself and you wouldn't get expected results – PCM Jun 28 '21 at 05:49
  • @PrathameshBhatkar If you don't put parenthesis, then how can you specify the arguments. A Lambda function is written in that way. What you say is incorrect, because if we do not put PARENTHESIS, the function won't run. Only when you don't use lambda, you need to remove parenthesis – PCM Jun 28 '21 at 08:32
  • Sorry I forgot that there is an arg to pass my bad – Prathamesh Bhatkar Jun 28 '21 at 09:05