2014-10-23 1 views
-1

это только одна из школьных работ, которые я делаю, и даже учитель не может ее использовать. каждый раз, когда я нажимаю кнопку распродажу и кнопку пополнения для waterwomen он делает эту ошибкуUnboundLocalError: локальная переменная 'WaterWomen', на которую ссылается перед назначением

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/idlelib/run.py", line 121, in main 
    seq, request = rpc.request_queue.get(block=True, timeout=0.05) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/queue.py", line 175, in get 
    raise Empty 
queue.Empty 

Во время обработки вышеуказанного исключения, другое исключение произошло:

Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/tkinter/__init__.py", line 1487, in __call__ 
    return self.func(*args) 
    File "/Users/jiho/Documents/DTS3/version3.py", line 87, in <lambda> 
    mbutton = Button(mGui,text ='SELL 1',command = lambda: WaterWomenSell()).place (x=20, y=140) 
    File "/Users/jiho/Documents/DTS3/version3.py", line 50, in WaterWomenSell 
    Watertext = WaterWomen.get() 
UnboundLocalError: local variable 'WaterWomen' referenced before assignment 

Код

import sys 
from tkinter import * 
mGui = Tk() 

from tkinter import messagebox 
from tkinter import filedialog 

def mReset(): 
if "SuperDude": 
    SuperDude = 8 
elif "LizardMan": 
    comicstock = 12 
else: 
    comicstock = 3 
    return 


def mQuit(): 

mExit = messagebox.askyesno(title="Quit",message="Are you sure?") 
if mExit >0: 
    mGui.destroy() 
    return 

def mOpen(): 

myopen = filedialog.askopenfile() 
return 

def SuperDudeSell(): 
Supertext = SuperDude.get() 
SuperDude.set(SuperDude.get() - 1) 
Superlabel = Label(mGui,text=Supertext).pack 
return 
def SuperDudeRe(): 
Supertext = SuperDude.get() 
SuperDude.set(SuperDude.get() + 10) 
Superlabel = Label(mGui,text=Supertext).pack 
return 

def LizardManSell(): 
Lizardtext = LizardMan.get() 
LizardMan.set(LizardMan.get() - 1) 
Lizardlabel = Label(mGui,text=Lizardtext).pack 
return 
def LizardManRe(): 
Lizardtext = LizardMan.get() 
LizardMan.set(LizardMan.get() + 10) 
Lizardlabel = Label(mGui,text=Lizardtext).pack 
return 

def WaterWomenSell(): 
Watertext = WaterWomen.get() 
WaterWomen.set(WaterWomen.get() - 1) 
WaterWomen = Label(mGui,text=Watertext).pack 
return 
def WaterWomenRe(): 
Watertext = WaterWomen.get() 
WaterWomen.set(WaterWomen.get() + 10) 
WaterWomen = Label(mGui,text=Watertext).pack 
return 



SuperDude = IntVar() 
SuperDude.set('8') 
LizardMan = IntVar() 
LizardMan.set('12') 
WaterWomen = IntVar() 
WaterWomen.set('3') 

SuperDudeL = Label(textvariable = (SuperDude)).place (x=170, y=20) 
LizardManL = Label(textvariable = (LizardMan)).place (x=170, y=70) 
WaterWomenL = Label(textvariable = (WaterWomen)).place (x=170, y =120) 

mGui.geometry('230x200+500+300') 
mGui.title('COMIC BOOK STORE') 
mlable = Label(mGui,text='Comic Book Store',fg='purple').place (x=70, y=0) 
mlable = Label(mGui,text='<Super Dude> Left stock:').place (x=10, y=20) 
mlable = Label(mGui,text='<Lizard Man> Left stock:').place (x=10, y=70) 
mlable = Label(mGui,text='<Water Women> Left stock:').place (x=10, y=120) 

#Super Dude 
mbutton = Button(mGui,text ='SELL 1',command = lambda: SuperDudeSell()).place (x=20, y=40) 
mbutton = Button(mGui,text ='RESTOCK 10',command = lambda: SuperDudeRe()).place (x=100, y=40) 
#Lizard Man 
mbutton = Button(mGui,text ='SELL 1',command = lambda: LizardManSell()).place (x=20, y=90) 
mbutton = Button(mGui,text ='RESTOCK 10',command = lambda: LizardManRe()).place (x=100, y=90) 
#Water Women 
mbutton = Button(mGui,text ='SELL 1',command = lambda: WaterWomenSell()).place (x=20, y=140) 
mbutton = Button(mGui,text ='RESTOCK 10',command = lambda: WaterWomenRe()).place (x=100, y=140) 



# Menu Construction 

Menubar=Menu(mGui) 


filemenu = Menu(Menubar, tearoff = 1) 
filemenu.add_command(label="Reset",command = mReset) 
filemenu.add_command(label="close",command = mQuit) 

Menubar.add_cascade(label="File",menu=filemenu) 
mGui.config(menu=Menubar) 


# SetUp 

setupmenu = Menu(Menubar,tearoff = 0) 
setupmenu.add_checkbutton(label = "Auto") 

Menubar.add_cascade(label="SetUp",menu=setupmenu) 



# Help Menu 

helpmenu = Menu(Menubar,tearoff = 0) 
helpmenu.add_command(label="Help Docs") 
Menubar.add_cascade(label="Help",menu=helpmenu) 
+0

Можете ли вы сузить пример до минимального набора, который все еще имеет тот же самый симптом? – Denise

ответ

1

В ваши функции WaterWomen вы, кажется, ошибочно указали имена для ярлыков ярлыков.

Сравнить

def WaterWomenRe(): 
    Watertext = WaterWomen.get() 
    WaterWomen.set(WaterWomen.get() + 10) 
    WaterWomen = Label(mGui,text=Watertext).pack 
    # should have been Waterlabel 
    return 

с

def LizardManRe(): 
    Lizardtext = LizardMan.get() 
    LizardMan.set(LizardMan.get() + 10) 
    Lizardlabel = Label(mGui,text=Lizardtext).pack 
    return 

сообщения об ошибке вы получаете из-за ваш переменные неправильно именованным, питон думает, что вы пытаетесь доступ WaterWomen, прежде чем она существует. То есть WaterWomen = Label(mGui,text=Watertext).pack приходит после Watertext = WaterWomen.get(). Несмотря на то, что WaterWomen существует в глобальном масштабе, потому что вы назначаете ему, Python будет рассматривать его как свою локальную переменную, которая не существует до тех пор, пока она не будет назначена. Если вы действительно хотите получить доступ к глобальной переменной, а затем ее изменить, вам нужно объявить переменную глобальным в верхней части функции. например.

def add_to_var(x): 
    global var 
    new_var = var + x # access 
    var = new_var # assignment 
Смежные вопросы

 Смежные вопросы