[Tutor] conditional execution
Patti Scott
pscott_74 at yahoo.com
Tue Apr 1 18:07:06 CEST 2014
I've been cheating: comment out the conditional statement and adjust the indents. But, how do I make my program run with if __name__ == 'main': main() at the end? I thought I understood the idea to run a module called directly but not a module imported. My program isn't running, though.
Below is the last textbook example (Python Programming, Zelle) I reworked. Runs when I comment out the conditional statement. I am self-studying. Python 2.7.3, Notepad++, Windows PowerShell.
# calc.pyw
# a 4-function calculator that uses Python arithmetic
# illustrates use of objects and lists to build a simple GUI
from graphics import *
from button import Button
class Calculator:
# this class implements simple calculator GUI
def __init__(self):
# create window for calculator
win = GraphWin('calculator')
win.setCoords(0,0,6,7)
win.setBackground('slategray')
self.win = win
# now create the widgets
self.__createButtons()
self.__createDisplay()
def __createButtons(self):
# create list of buttons
# start with all the standard-sized buttons
# bSpecs gives center coords and labels of buttons
bSpecs = [(2,1,'0'), (3,1,'.'),
(1,2,'1'), (2,2,'2'), (3,2,'3'), (4,2,'+'), (5,2,'-'),
(1,3,'4'), (2,3,'5'), (3,3,'6'), (4,3,'*'), (5,3,'/'),
(1,4,'7'), (2,4,'8'), (3,4,'9'), (4,4,'<-'), (5,4,'C')]
self.buttons = []
for (cx,cy, label) in bSpecs:
self.buttons.append(Button(self.win, Point(cx,cy), .75,.75, label))
# create the larger equals button
self.buttons.append(Button(self.win, Point(4.5,1), 1.75, .75, '='))
# activate all buttons
for b in self.buttons:
b.activate()
def __createDisplay(self):
bg = Rectangle(Point(.5,5.5), Point(5.5, 6.5))
bg.setFill('white')
bg.draw(self.win)
text = Text(Point(3,6), "")
text.setFace('courier')
text.setStyle('bold')
text.setSize(16)
text.draw(self.win)
self.display = text
def getButton(self):
# waits for button to be clicked and returns label of that button
while True:
p = self.win.getMouse()
for b in self.buttons:
if b.clicked(p):
return b.getLabel() # method exit
def processButton(self, key):
# updates calculator display for press of this key
text = self.display.getText()
if key == 'C':
self.display.setText("")
elif key == "<-":
# backspace, slice off the last character
self.display.setText(text[:-1])
elif key == '=':
# evaluate the expression and display result
# the try ... except mechanism catches errors in the
# formula being evaluated
try:
result = eval(text)
except:
result ='ERROR'
self.display.setText(str(result))
else:
# normal key press, append it to end of display
self.display.setText(text+key)
def run(self):
# infinite event loop to process button clicks
while True:
key = self.getButton()
self.processButton(key)
#this runs the program
if __name__ == 'main':
#first create a calulator object
theCalc = Calculator()
# now call the calculator's run methond
theCalc.run()
and I get
PS C:\Users\Owner\Py Programs> python calc.py
PS C:\Users\Owner\Py Programs>
Thanks
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20140401/9de9d531/attachment.html>
More information about the Tutor
mailing list