[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