S
skanemupp
using tkinter and python i now have a small App (that will hopefully
soon be a fully functioning calculator) where u can push buttons and
the corresponding number or operator is shown.
when u press 1, "1" appears on the screen, pres + and "+" appears etc.
at the moment every output overwrites the previous so what i want to
do is obviosuly to add every new output to a string so that i can read
the string and perform the calculation.
so i want:
* when pushing the button push the token of the button onto a string
* display the new string, ie "1+2" for example
* want to be able to access this string when pressing calculate so i
can figure out which operators should
be done first so it can solve something like this: "(1+2*3)(3-4/2)"
and not just simple "1+2"-stuff.
do i have to have some global string-variable in the GUIframework
then? im not sure where to start...
here is the code:
#! /usr/bin/env python
from Tkinter import *
import tkMessageBox
class GUIFramework(Frame):
"""This is the GUI"""
def __init__(self, master=None):
"""Initialize yourself"""
"""Initialise the base class"""
Frame.__init__(self,master)
"""Set the Window Title"""
self.master.title("Calculator")
"""Display the main window"
with a little bit of padding"""
self.grid(padx=10,pady=10)
self.CreateWidgets()
def CreateWidgets(self):
## """Create the Entry, set it to be a bit wider"""
## self.enText = Entry(self)
## self.enText.grid(row=0, column=0, columnspan=3)
"""Create the Button, set the text and the
command that will be called when the button is clicked"""
self.btnDisplay = Button(self, text="calculate!",
state=DISABLED)
self.btnDisplay.grid(row=0, column=31)
self.btnDisplay = Button(self,text='1',command=lambda
n=1:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='2',command=lambda
n=2:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='3',command=lambda
n=3:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='+',command=lambda
n="+":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='4',command=lambda
n=4:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='5',command=lambda
n=5:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='6',command=lambda
n=6:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='-',command=lambda
n="-":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='7',command=lambda
n=7:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='8',command=lambda
n=8:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='9',command=lambda
n=9:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='*',command=lambda
n="*":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='0',command=lambda
n=0:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='C',command=lambda
n="C":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='r',command=lambda
n="r":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='/',command=lambda
n="/":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=3, padx=5, pady=5)
def Display(self, number):
#print number
self.lbText = Label(self, text=number)
self.lbText.grid(row=0, column=0)
if __name__ == "__main__":
guiFrame = GUIFramework()
guiFrame.mainloop()
soon be a fully functioning calculator) where u can push buttons and
the corresponding number or operator is shown.
when u press 1, "1" appears on the screen, pres + and "+" appears etc.
at the moment every output overwrites the previous so what i want to
do is obviosuly to add every new output to a string so that i can read
the string and perform the calculation.
so i want:
* when pushing the button push the token of the button onto a string
* display the new string, ie "1+2" for example
* want to be able to access this string when pressing calculate so i
can figure out which operators should
be done first so it can solve something like this: "(1+2*3)(3-4/2)"
and not just simple "1+2"-stuff.
do i have to have some global string-variable in the GUIframework
then? im not sure where to start...
here is the code:
#! /usr/bin/env python
from Tkinter import *
import tkMessageBox
class GUIFramework(Frame):
"""This is the GUI"""
def __init__(self, master=None):
"""Initialize yourself"""
"""Initialise the base class"""
Frame.__init__(self,master)
"""Set the Window Title"""
self.master.title("Calculator")
"""Display the main window"
with a little bit of padding"""
self.grid(padx=10,pady=10)
self.CreateWidgets()
def CreateWidgets(self):
## """Create the Entry, set it to be a bit wider"""
## self.enText = Entry(self)
## self.enText.grid(row=0, column=0, columnspan=3)
"""Create the Button, set the text and the
command that will be called when the button is clicked"""
self.btnDisplay = Button(self, text="calculate!",
state=DISABLED)
self.btnDisplay.grid(row=0, column=31)
self.btnDisplay = Button(self,text='1',command=lambda
n=1:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='2',command=lambda
n=2:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='3',command=lambda
n=3:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='+',command=lambda
n="+":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=3, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='4',command=lambda
n=4:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='5',command=lambda
n=5:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='6',command=lambda
n=6:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='-',command=lambda
n="-":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=4, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='7',command=lambda
n=7:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='8',command=lambda
n=8:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='9',command=lambda
n=9:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='*',command=lambda
n="*":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=5, column=3, padx=5, pady=5)
self.btnDisplay = Button(self,text='0',command=lambda
n=0:self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=0, padx=5, pady=5)
self.btnDisplay = Button(self,text='C',command=lambda
n="C":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=1, padx=5, pady=5)
self.btnDisplay = Button(self,text='r',command=lambda
n="r":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=2, padx=5, pady=5)
self.btnDisplay = Button(self,text='/',command=lambda
n="/":self.Display(n),width=1,height=1)
self.btnDisplay.grid(row=6, column=3, padx=5, pady=5)
def Display(self, number):
#print number
self.lbText = Label(self, text=number)
self.lbText.grid(row=0, column=0)
if __name__ == "__main__":
guiFrame = GUIFramework()
guiFrame.mainloop()