[Tutor] Problems with GUI calling a class

Kent Johnson kent_johnson at skillsoft.com
Sat Oct 16 17:45:01 CEST 2004


David,

It looks like neither branch of your conditional is being executed. You 
have, in outline,
         if self.yes_no == 'N':
             results = ...
         elif self.yes_no == 'Y':
             results = ...
         self.results_txt.insert(0.0,results)

If self.yes_no is neither 'N' or 'Y' then results will not be initialized 
and you will get the error you are seeing.

Looking a little above this section in your code, you have
   if self.yes_no.get():
so I am guessing that self.yes_no is a reference to something in the gui? 
and not a string. Maybe the conditional that is failing also should be 
using self.yes_no.get()?

Kent

At 04:32 PM 10/16/2004 +0100, David Holland wrote:
>  I wrote a program to calculate the likely result of a
>one day cricket match and then decided to make it into
>a class and have another class for a GUI.
>It all works well but I can not call the function from
>the first class from the GUI class, insteading of
>returning a result it just gives this error 'Exception
>in Tkinter callback
>Traceback (most recent call last):
>   File "/usr/lib/python2.3/lib-tk/Tkinter.py", line
>1345, in __call__
>     return self.func(*args)
>   File
>"/home/david/Documents/pyprogramming/cricketv6.py",
>line 194, in cricket_getinfo
>     self.results_txt.insert(0.0,results)
>UnboundLocalError: local variable 'results' referenced
>before assignment
>'
>This is the code which create the GUI and if it worked
>would call the calculations.
>     def cricket_getinfo(self):
>         """Get values from the GUI and submit for
>calculation"""
>         print "test"
>         runs = self.runs_ent.get()
>         wickets = self.wickets_ent.get()
>         overs = self.overs_ent.get()
>         if self.yes_no.get():
>             used_before = 'Y'
>         else:
>             used_before = 'N'
>         Cricketobj = Cricket()
>         #create code to call the calculations
>         z = 50
>         win = 10
>         if self.yes_no == 'N':
>             win = 10
>             originalscore = 0
>             wold = 0
>             yold = 0
>             results =
>Cricketobj.runfuns(wickets,overs,runs,z, win,
>originalscore, orignovoers, wold, yold)
>             print results
>         elif self.yes_no == 'Y':
>         #get the data from last time
>             xold, yold, wold = openlasttime()
>         #now we are calculating using the more up to
>date run rate
>             orignovoers = y
>             runs = int(runs)
>             xold = int(xold)
>             x = x - xold
>             overs = int(overs) - int(yold)
>             wickets = int(wickets) - int(wold)
>             wold = int(wold)
>             win = 10
>             z = 50
>             results =
>Cricketobj.runfuns(wickets,overs,runs,z, win,
>originalscore, orignovoers, wold, yold)#(w,y,x,z,win,
>xold, orignovoers, wold, yold)
>         #the line below is causing it crash
>         #results = 1
>         self.results_txt.insert(0.0,results)
>
>Cricketobj.savecurrentstate(runs,overs,wickets)
>
>
>Can anyone see why I am not calling the class's
>function properly ?
>
>Thanks in advance.
>David
>
>
>
>
>
>___________________________________________________________ALL-NEW Yahoo! 
>Messenger - all new features - even more fun!  http://uk.messenger.yahoo.com
>_______________________________________________
>Tutor maillist  -  Tutor at python.org
>http://mail.python.org/mailman/listinfo/tutor



More information about the Tutor mailing list