2013-10-15 57 views
1

我是新手编程,刚刚被设置为使用Tkinter在Python中创建一个骰子滚轮。我完全被这个错误消息难住:Tkinter骰子滚轮

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__ 
    return self.func(*args) 
    File "C:/Users/d/Desktop/Dice Simulator/Simulator.py", line 12, in roll 
    if y == 1: 
UnboundLocalError: local variable 'y' referenced before assignment 

任何人都可以阐明我的错误吗?这里是我的整个代码:

y = 1 
print "Please wait for the GUI to load" 
from Tkinter import * 
DICE = dict(
    sixsided={'name': 'Six Sided Dice', 
       'side': 6}, 
    eightsided = {'name': 'Eight Sided Dice', 
        'side': 8} 
    ) 
names = ['Six Sided Dice', 'Eight Sided Dice'] 
import random 


def back_(): 
    diceroll.destroy() 

def roll(): 
    if y == 1: 
     blankanswer.pack_forget() 
     droll.set("You rolled a " + str(random.randrange(1,endnum,1))) 
     filledanswer.pack() 
     y = 2 
    if y == 2: 
     droll.set("You rolled a " + str(random.randrange(1,endnum,1))) 

def cont_(): 
    y = 1 
    if dice.get() == "Six Sided Dice": 
     selecteddice = "sixsided" 
    if dice.get() == "Eight Sided Dice": 
     selecteddice = "eightsided" 

    diceroll = Tk() 
    diceroll.title("Dice Simulator") 

    endnum = int(DICE[selecteddice]["side"]) 

    droll = StringVar() 
    droll.set("You rolled a " + str(random.randrange(1,endnum,1))) 

    reroll = Button(diceroll, text="Click to roll the " + dice.get() + ".",command=roll) 
    reroll.pack() 

    blankanswer = Label(diceroll, text="You rolled a ") 
    blankanswer.pack() 


    filledanswer = Label(diceroll, textvariable=droll) 

    back = Button(diceroll, text="Back", command=back_) 
    back.pack(side=BOTTOM) 

    diceroll.mainloop() 



diceselect = Tk() 
diceselect.title("Select your dice") 

Label(diceselect, text="Please select the dice you would like to roll").pack() 

dice = StringVar() 
dice.set("Six Sided Dice") 

entry = OptionMenu(diceselect, dice, *names) 
entry.configure(width=15) 
entry.pack(side=LEFT) 

cont = Button(diceselect, text="Continue", command=cont_) 
cont.configure(width=15) 
cont.pack(side=RIGHT) 

diceselect.mainloop() 

在此先感谢!

+0

阅读消息'UnboundLocalError:本地变量'y'在赋值之前被引用'尝试解释器是什么意思。 –

回答

2

roll()使用global y你有赋值语句,并希望利用全球y

def roll(): 
    global y 
    if y == 1: 
    # other code 

注意:当你做任务y = 2你在当地namesapce创造新y(禁止使用全局y因为地方y范围是功能)。