Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!nntp.club.cc.cmu.edu!micro-heart-of-gold.mit.edu!bloom-beacon.mit.edu!panix!gordon From: John Gordon Newsgroups: comp.lang.python Subject: Re: What's wrong with this code? (UnboundLocalError: local variable referenced before assignment) Date: Mon, 24 Jun 2013 20:12:49 +0000 (UTC) Organization: PANIX Public Access Internet and UNIX, NYC Lines: 38 Message-ID: References: NNTP-Posting-Host: panix1.panix.com X-Trace: reader2.panix.com 1372104769 10206 166.84.1.1 (24 Jun 2013 20:12:49 GMT) X-Complaints-To: abuse@panix.com NNTP-Posting-Date: Mon, 24 Jun 2013 20:12:49 +0000 (UTC) User-Agent: nn/6.7.3 Xref: csiph.com comp.lang.python:49074 In pablobarhamalzas@gmail.com writes: > isWhite = True > > def change(event): > if event.x > x1 and event.x < x2 and event.y > y1 and event.y < y2: > if isWhite: > w.itemconfig(rect, fill="blue") > isWhite = False > else: > w.itemconfig(rect, fill="white") > isWhite = True > > w.bind("", change) > > root.mainloop() > The problem occurs when clicking on the white square. The following error > appears: > "if isWhite: > UnboundLocalError: local variable 'isWhite' referenced before assignment" > However, the isWhite variable is clearly defined at "True" a few lines > before. Since you're new to programming, this might be a bit tricky to explain, but I'll do my best. :-) The problem is that change() isn't being executed here; instead it's being executed from within root.mainloop(), whenever the user presses button-1. And within root.mainloop(), there is no variable called isWhite. -- John Gordon A is for Amy, who fell down the stairs gordon@panix.com B is for Basil, assaulted by bears -- Edward Gorey, "The Gashlycrumb Tinies"