[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