Build A Simple Calculator App - Python Tkinter GUI Tutorial #5
Vložit
- čas přidán 26. 07. 2024
- How to Build A Simple Calculator App with TKinter and Python. In this video we'll start to build a simple calculator app using the stuff we've learned from the previous videos.
In this series I'll show you how to create graphical user interfaces for Python with Tkinter. TKinter comes with Python already, so there's nothing to install!
✅ Watch The Other Videos In This Python Playlist:
bit.ly/2UFLKgj
▶️ See More At:
Codemy.com
✅ Join My Facebook Group:
bit.ly/2GFmOBz
✅ Subscribe To My CZcams Channel:
bit.ly/2IGzvOR
▶️ Learn to Code at Codemy.com
Take $22 off with coupon code: youtube
▶️ Watch Entire Tkinter Playlist ✅ Subscribe To My CZcams Channel:
bit.ly/2UFLKgj bit.ly/2IGzvOR
▶️ See More At: ✅ Join My Facebook Group:
Codemy.com bit.ly/2GFmOBz
▶️ Learn to Code at Codemy.com ✅ Buy a Codemy T-Shirt!
Take $30 off with coupon code: youtube1 bit.ly/2VC9WUN
yooooooooooooooo plz say hi plz
17:00 if you error syntax you have to replace Lambda to lambda. The syntax is worked than Lambda
Never use capital L in lambda...I don't use capital L in the video.
@@Codemycom yeah but i look it's large L :d
@@letsarray5712 so? the size of it doesn't matter at all, do it in the same way I showed in the video
@@Codemycom Oke fine that's not the big problem to me 😂
Thank you, due to the font it looks like its "L" instead of "l", I made that mistake (if using idle, lambda turns orange, Lambda does not)
Great teaching ! This playlist is paced so well. I've been going in circles trying to get started with Tkinter till now. This gave me a confidence boost ! Thank you!
Happy to hear it!
Want to see more about making something like this that scales with resizing.
Please continue to make videos, you are truly a great creator and help so many people like me learn to code
I have hundreds of videos on my channel and I create more every week.
Hello. Its from Bhutan. This video really helped me. Kadrinchey!
Glad to hear it!
thanks this video was really helpful and entertaing to both code and watch!
Glad it helped!
I enjoy how fun you make your lessons, 😃Thank you
Glad you're enjoying them!
I think what helps me learn this is making it my own: changing labels, adding more functions or buttons
that's usually the case
Make a modern casio fx 580 💪
I know this is late but what other type of functions did you add im adding some stuff too but just the division and multiplication wondering if you did anything else?
It's a wow what you are doing........keep going
this is also exactly what I demand. thanks.
Glad you liked it!
Great work
Thanks!
Nice video series and good explanation.
Comment to the commentators: I no sometimes there are weird error messages but I think instead of asking here you could try to figure it out by yourself . It might take some time and can be annoying but at the end of the day you like to learn how to code by yourself and then you'll need to find solutions to upcoming issues.
Cheers
most of coding is googling errors
I do this to some extent. I will try any ideas I have of the top of my head, for me this is about 10 -15 mins of re-writing and testing. Once I feel like I'm out of ideas, then I'll google or ask around.
Thanks great help ..
Happy to help!
estou gostando muito das aulas parabens profesor
Glad you're enjoying them!
you deserve million LIKE for this chain of videos
I agree, tell your friends! :-p
17:01 What you want is e.insert("end", number)
You Are Very Good Teacher John Elder Please Make A Video On Doing Webscraping Using Python
Thanks :-)
god bless you men thanks alot ❤❤❤
thanks
you are a great man
Thanks!
super!!! Thanks a Lot..
Sure thing!
I very like your video.
Glad you like it :-)
Amazing
Thanks!
Thanks for the great intro to python. Can't believe my first project worked:)
Can you explain how to limit input to the GUI or easily exclude letters and non 'math' symbols from the keyboard please?
I don't have any videos on that
Thank You🙏
Welcome!
Is not there a way to use for loop? By the way I gonna create a timer for PC with GUI and want to understant how i will use os. system's shutdown commands with tkinter. Of course input must be int.
i love this
Thanks sir ...
This is so simple ..i understood All the things thankyou ...
Love from INDIA
Thanks for watching!
Thank you
You're welcome
Lesson check. Thanks.
Thanks
Hi John,
Loving your TKinter tutorials so far.
I have a question, though. I wrote this loop to create the buttons for 1-9:
for x in range(1,4):
y = 10-3*x
for z in range(y, y+3):
btn = Button(root, text=z, padx=40, pady=20,
command=lambda: button_click(z)).grid(row=x, column=z-y)
The buttons are rendered fine, but when I click them, they all insert the number 3 into the entry box, regardless of the number on the button.
Changing the lambda as below solved the problem, but I don't understand why:
lambda q=z: button_click(q)
Can you explain it?
Because you are in a loop and the lambda function you wrote has no variable i it takes the value of the last iteration. In order to fix it write your lambda like this: lambda q=z: button_click(q) which will work because q is a variable of the lambda so it changes every time you call it. Also its more pythonic to create your buttons with a list instaid of having for loops.
@@444444444paok Thanks for the explanation! When you say create buttons with a list, do you mean create each button on a separate line, like in the video, or using a [list]?
@@abigailhillen-schiller3641 yeah i mean something like this: num_buttons = [Button(root, text=str(i), width=7, borderwidth=4, pady=15, padx=1, font="Calibri 15 bold", command=lambda i=i: symbol_button_pressed(i)).grid(row=str(3 - (i - 1) // 3), column=str((i - 1) % 3)) for i in range(1, 10)]
Great tip, thanks!
@@444444444paok That's some really clever indexing for the rows and columns, thanks for the tip.
Nice video
Thanks!
"its a program, we can build it and that should be cool"
~John
lol
Hello Codemy how can i get an auto selection on a row in a treeview when i get a search
when i search i want to get the result
i try tree.selection_set(), but it can't selected row
It would be helpful for us if you write the script in the description too.
But I like your videos.
The code is here: github.com/flatplanet/Intro-To-TKinter-CZcams-Course
Thanks u🎉
Welcome!
Awesome. Great teaching. Is there any chance to have access to the written codes for each of the video?
github.com/flatplanet/Intro-To-TKinter-CZcams-Course
Wow.... this is more advanced than I need... lol
ha
Hello from Croatia - 🇭🇷
First, I just want to say that
I love your videos. I think that your explaining skills are a great.
Second - I have a question :
I built my calculator and everything works perfect but I want to know how the Entry widget recognizes "123" as one number and not as three numbers - "1" , "2" , "3".
Is that just how it works or what ? Because we don't need to code anything for it to do that.
no, python will see it as a string
Hello From Indonesia
Yes it's is very nice
Please share more videos
I release new videos every day
@@Codemycom thanks friend interesting for coding
@@adarsht6266 no problem
Can you connect with us to clarify doubts?
@@adarsht6266 People who purchase membership to my site can ask questions about the videos and I answer them. I don't do consulting outside of my courses tho.
Hey, why you have placed columnspan parameter and applied it on the Entry widget? The other (button) widgets inherit it?
no they don't inherit it. We want the entry widget to span the three columns below that hold the other buttons...that's why.
hey john !!!! is there any way to make our python app stands alone in mobile without installing a python compiler ??? thank you
Sure, but it's complicated...
Imo a cleaner and (more) pythonic way of defining all the buttons is
number_buttons = [ Button( root, text=str(i%10), padx=40, pady=20, command=(lambda j=i : button_click(j%10)) ) for i in range(1, 11)]
Then, to put them on the grid
for i in range(10):
number_buttons[i].grid(row=i//3+1, column=i%3)
whatever floats your boat
@@Codemycom Ive been enjoying your videos until I started reading your responses. I have to say they arent very professional, Iike this one above. I hope you have grown to be more understanding in the last 3 yrs!
nice..
thanks
great
Thanks
Nice tutorials. Instead of running the code everytime, is there a way TK gui can automatic reload after saving in vscode?
no
what does the lambda do??
I just try it myself. In the end , the result is a little bad, but I have finish it.
The tutorials are very useful ❤❤❤
Glad you enjoy them!
what are the units of width and height that we define inside the 'root' function? Is it pixels?
basically, yes
I´ve been trying to bind the buttons to keys on the keyboard, every time it seems to just type out all the numvers and they keys don't seem to do anything. Any advice?
I've got several videos on binding on the playlist
Hi, have a problem, at 11:04
line 25 and 26
button_0 = Button(root, text='0', padx=40, pady = 20, command = button_add())
button_add = Button(root, text='+', padx=40, pady = 20, command = button_add())
seems the button_add redefine the botton_add, it caused error 'Button' object is not callable
did I type something wrong otherwise.
shouldn't be any spaces after your padys and commands
no its cause u used () in commands
you cant use parentheses
I get a syntax error associated with the Lambda; based on some Stack Overflow comments this looks like it's not possible to use in Python 3? I should go try my older version of Python and see if it works there. Not sure how to get around this. OK never mind thanks, I saw your answer about lowercase L in "lambda". But YOUR screen keeps capitalizing them! At least it looks like uppercase.
My screen does not capitalize them lol that's what a lowercase l looks like in sublime...
the syntax error for the lambda function got me too. I tried a few things before I remembered that comments were a thing. hurray for the comments sections.
ha
When I came to 8:47 on the video where you made the buttons my buttons where all over the place could you help
What did you do differently in your code? If you did what I did, you'd get the same result.
num1 = input("Type in the first number: ")
num2 = input("Type in the second number: ")
result = float(num1) + float(num2)
print(result)
That won't work in tkinter
@@Codemycom Yeah, just realized it... it works in Python tho
thats a console application
I smashed said "LIKE" button below, now my screen is broken... THANKS!
Life is risk! lol
U smashed the screen then got a syntax error anyways Good vid keep it up
@@Mkz32 too funny!
v helpping
How to make the tkinter window flexible when maximizing or adjusting the size of the window?
Sorry, I don't know what you mean by flexible
Hello, after adding the column span I still have big gaps in-between my columns ?
Weird...double check your code...
@@Codemycom The gaps remain even if i make all the buttons the same size
@@jamesh6224 There has to be something wrong with your code, or something you aren't seeing...
This is late but I had the problem with it too. I was on Mac and it turns out that there is a way to tell the tkinter module to move the buttons closer. Just add sticky= "nsew" to the end of all of your .grid() method (example : button_1.grid(row=3, column=0, sticky="nsew")
stackoverflow.com/questions/45828923/remove-space-between-buttons-in-tkinter#45844991
@@Hyvexx You are a LIFESAVER!
when i execute it it says:
ModuleNotFoundError: No module named 'tkinker'
Nevermind, i spelled it wrong, lol
@@leannebourque was just gonna say that lol
from tkinter import *
^^^
Use this
after adding the columnspan of the clear and equals button the 0 button didnt show
good
Thanks
can you quickly explain a little more what e.insert(0,number) requires the 0? is it a boolean value of some sort?
think of a python list...they are indexed...the first index number is 0. So we want to delete from zero to some number in the box.
Hey thanks i need just one more weak and i done wth python by the way i dont a pc so i use pythonista ipad 4 ios : 10.3.3 34bit
I like your tutorials but i want to know that how can we make that
First when we start a start button will be visible and when we click it the screen changes to this calculator in that screen only not in another screen
So please tell me
And also
Thank You
Use frames or tabs
Hello, can you explain me why do you have to enter two arguments,like e.insert(0, number)? or (0,END)
because you can delete certain characters in the entry box..so it's a range of all the characters in the entry box
@@Codemycom oh, it is simple logic when you put it that way. Thank you on your fast answer!
Hello John.
What does END do in e.delete(0, END)??
Think of it as a python list...we're saying delete everything from position 0, to the END of the list.
@@Codemycom Thank you John. And is it the same in e.insert(0, number)? Does it mean that print everything from 0 to the number entered. Or am I wrong?
@@sunilkjha3638 Basically, yes
in before lecture after button defining we put it button.pack() why it is not put in this lecture
In this video we're using the .grid() system instead of .pack() grid is used when you need more precision placing your widgets.
I keep rewatching because my calculator window is way bigger that yours. My padx and pady are the same
did you set the size of the app differently?
@@Codemycom I don't see a step for sizing the window in the video. I think the main reason is I'm working on a Mac. I tried changing fg and bg colors and it would not work. I had to import tkmacosx. Which works but the layout changes when I comment it out vs use it. Thanks for the reply, hitting a walk with the next section in getting my icon to show up. I tried absolute path and relative paths.
@@hedonistjohn6200 Right at the top of the app: root.geometry("500x550") or whatever numbers you want to put in there
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Rex\AppData\Local\Programs\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "G:/python/calc_gui.py", line 33, in
button14= Button(root,text="0",padx=30,pady=30,command=lambda: Button_click(0)).grid(row=6,column=3)
File "G:/python/calc_gui.py", line 12, in Button_click
e.delete(0,tk.END)
AttributeError: 'NoneType' object has no attribute 'delete'
have same problem
@@kermitsan3892 and me i thing because our version is python 3.8 but the video used older version python 3.7
What is meaning for lambda?
Why we have to use it here sir?
I am beginner for python...
tkinter won’t allow you to pass parameters to functions with commands unless you use a lambda
How you run your code, I can't run my code in sublime text?? Good video!
I'm not running the code in Sublime text. I'm using the git bash terminal that I downloaded.
git-scm.com/downloads
@@Codemycom Ty I'll try that :]
@@Codemycom I just get an error:
$ python calculator.py
bash: python: command not found
any solution?
@@mariogamer587 you didn't add python to path when you installed it. Reinstall it, check the box that says add python to path.
@@Codemycom ok ty I added it through settings😊
How did you open your program?
What do you mean? Open what?
from tkinter import *
import math
root= Tk()
root.title("Simple Calc")
e=Entry(root,width=40,borderwidth=5).grid(row=0,column=0,columnspan=4,padx=30,pady=10)
def Button_click(number):
e.delete(0,tk.END)
e.insert(0,number)
#defining Buttons
button1= Button(root,text="1",padx=30,pady=30,command=lambda: Button_click(1)).grid(row=4,column=0)
button2= Button(root,text="2",padx=30,pady=30,command=lambda: Button_click(2)).grid(row=4,column=1)
button3= Button(root,text="3",padx=30,pady=30,command=lambda: Button_click(3)).grid(row=4,column=2)
button4= Button(root,text="4",padx=30,pady=30,command=lambda: Button_click(4)).grid(row=5,column=0)
button5= Button(root,text="5",padx=30,pady=30,command=lambda: Button_click(5)).grid(row=5,column=1)
button6= Button(root,text="6",padx=30,pady=30,command=lambda: Button_click(6)).grid(row=5,column=2)
button7= Button(root,text="7",padx=30,pady=30,command=lambda: Button_click(7)).grid(row=6,column=0)
button8= Button(root,text="8",padx=30,pady=30,command=lambda: Button_click(8)).grid(row=6,column=1)
button9= Button(root,text="9",padx=30,pady=30,command=lambda: Button_click(9)).grid(row=6,column=2)
button10= Button(root,text="+",padx=30,pady=30,command=lambda: Button_click()).grid(row=4,column=3)
button11= Button(root,text="-",padx=30,pady=30,command=lambda: Button_click()).grid(row=5,column=3)
button12= Button(root,text="*",padx=30,pady=30,command=lambda: Button_click()).grid(row=5,column=4)
button13= Button(root,text="/",padx=30,pady=30,command=lambda: Button_click()).grid(row=4,column=4)
button14= Button(root,text="0",padx=30,pady=30,command=lambda: Button_click(0)).grid(row=6,column=3)
button15= Button(root,text=".",padx=30,pady=30,command=lambda: Button_click()).grid(row=6,column=4)
button16= Button(root,text="Enter",padx=60,pady=20,command=lambda: Button_click()).grid(row=7,column=0,columnspan=2)
button17= Button(root,text="Clear",padx=60,pady=20,command=lambda: Button_click()).grid(row=7,column=2,columnspan=2)
root.mainloop()
Hey, could anyone please guide me to how to runs these functions(-,+,/,*) with 3 integers, using Tkinter. Thanks!!!
I am stuck with this... went through the whole list of comments but still have the issue:
butt_1 = Button(root, text="1", padx=40, pady=20, command=lambda: butt_click(1))
However when I click the button it says object not callable
oh I see my error... I had a button named butt_click later in the code... fixed... leaving the comment in case it helps anyone
@@atoparis Also, you can't padx and pady in the same place you defined the button.
we are using padx= 50 or 60 some number what is the number i mean units 50mm of 50 spaces
Pixels
i am getting this error
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\GEETIKA\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
File "D:\tkinter\Project 1 - Calculator.py", line 38, in
button_8 = Button(root, text = "8", padx=40, pady=20, command = lambda: button_click(8))
TypeError: button_click() takes 0 positional arguments but 1 was given
pls tell
You're passing 8 into your button_click function. Does your button_click function code accept arguments?
in my computer Lambda gave syntax error, lambda with small l works though
Yeah, it's never supposed to be capital L in lambda. I do lowercase in the video.
@@Codemycom It got me too the video looks like upper case L
@@ichabodsescape1885 Yeah, I hate that sublime does that
Use PyCharm. 😀
Does the Capital L of lambda executed by your interpreter
No, it's a lowercase l not capital L
For python 3.10, with pycharm, in Ubuntu, it's lambda instead of Lambda.
it's lowercase in the video too. I know it looks uppercase, but that's lower.
how do you save the calculator built as an app.
I have a video on making exe files in the playlist
Hi, I have SyntaxError: positional argument follows keyword argument. why
Because you typed the code wrong... compare it to the video to discover what you did differently.
Hello sir! Thanks for the video, very helpful.
I've encountered a problem. Before this, I tried the 'Click Me!' Box. Even after copying down the entire same thing of the calculator code, I still get the 'Enter your name' and 'Click Me!' box. How do I change that? Please help me.
Rewatch the video and follow along exactly.
I think u have run the previous file. Check the file and run or else mistake in code
how do you know to set the padx of "=" is 91 ???
Trial and error
Can anyone explain why lambda should be used? Why can I not just call button_click function with the correct number?
Try it and see. Tkinter doesn't allow you to pass things through a command, but it does allow it if you use a lambda
hey, for some reason when i try to do the e.get, it says there is no attribute called get, can you plez help me
do the grid in a new line and it will solve the problem. for example:
e = Entry(root)
e.grid(row=0, column=0)
instead of
e = Entry (root).grid(row=0, column=0)
@@zeyadabbood8401 Bless you
Looks nice but how to stylize the calculator?(colors/shapes/etc..)
In the normal tkinter way...check my playlist.
What version of python is everyone using? I'm using 3.9.2 and getting the following error:
button_1 = Button(root, text="1", padx=40, pady=20, command=Lambda: button_click(1))
^
SyntaxError: invalid syntax
The version is irrelevant. The l in lambda needs to be lowercase
why is tkinter gui not loading automatically why do i need to re-run it everytime i make changes.
that's how all coding works
It's possible to excute the program in android phone sir.? What is name of the app sir?
no tkinter doesn’t work on android
@@Codemycom thanks for reply sir.
But my idea is to create android app using python. is there any idea to do that sir.
What i have learn for that.?
16:30 when I use lambda the GUI launches but when I click a number I get an error
TypeError: 'Button' object is not callable
I don't understand cus I'm using lamda the same way he is.
Please help!😥
I think it's because I've named my Button button1.
I've noticed I have no error when I name it btn1 or button_1(like he did).
Really wish he would've said something lol.
But I'm going to see what happens when I change the rest of the Code.
Yea that was it.
The Button cannot be named 'button1' or 'button' or 'Button'
yep
omg, thank god.
Edit: having the same problem
hi, i wrote the code exactly as the tutorial but it have me this:
button_3=Button(root,text="3",padx=40,pady=20,command=lambda:button_click(3))
TypeError: 'Button' object is not callable
that's not exactly as the tutorial at all. You can't padx and pady where you define the button.
Please show us how to the entry widget bigger because it's too small
I do in the playlist already
I've done the code the same as you have but whenever i click on a number button it says "TypeError: button_click() takes 0 positional argument but 1 was given" I have no idea what this means please help o_o
then you haven't done the code the same as me. Check for typos...
When you originally defined button click, you probably didn't put anything between the parenthesis. The correct code should be
def button_click(number):
How can I subscribe only 27 $ to be accessible to all online courses. Please show me how. I visited the site but did not see it in front of computer screen.
codemy.com/membership-account/membership-checkout/?level=1
Add the coupon code and click the apply button
Hi, I have a problem with "e.delete(0, END)" says "END is not defined". :(
weird...try e.delete(0, tk.END)
also...is the 0 a zero? Or did you type a capital O letter?
@@Codemycom thanks for replying, I typed zero, and the "tk.END" solved the problem, thanks a lot. Nice video btw.
@@AugusSousa oh cool, glad it worked!
Hello, how do i increase the height of the calculator screen. It seems i can only adjust the width?. I tried increasing the height and got the following error:
tkinter.TclError: unknown option "-height"
Do you mean the entry box? You increase the font size: font=("Helvetica", 20)
@@Codemycom yes entry box, would ("Arial" 20) also work?
@@adebolaokanlawonsaseyi6655 Try it and see. You could have just tried it faster than it took to ask me.
@@Codemycom Thank you, it worked.
@@adebolaokanlawonsaseyi6655 sweet
I am facing issue while entering a new number with result already present in the input box (concatenation issue). How to resolve it?
Without knowing what you are doing or what your code is, I can't guess.
@@Codemycom I am working on Simple calculator. Whenever I type a new number, it gets concatenated with the previous result instead of clearing it.
@@deepanshumohan7777 My answer to you doesn't change...
( share done ) (: