2013-07-11 48 views
0

我不斷收到此錯誤「全局名稱v未定義。」我知道這最有可能被大量記錄,但是其他線程都與我的GUI情況非常相關。總之,在這裏我們去:全局名稱v沒有定義(但實際上是)? tkinter/python

v_amount= 5000 

def set_v_to_something_else(): 
    global v 
    v_amount=v_amount-1000 
    v.set(v_amount) 

v = StringVar() 
v.set(str(v_amount)) 

#create button that will allow v label to be set to something else 

vbutton = Button(root, text = "change v", command = set_v_to_something_else).pack() 
vlabel = Label(root, textvariable=v).pack() 

再次,它說,V是沒有定義的,即使我將其設置爲STRINGVAR()

在此先感謝

+0

嘗試在定義'v'後定義函數*。我認爲'global'在你使用時會查找變量名稱,而不是在函數被調用時。 – SethMMorton

+1

@SethMMorton:不,在你打電話之前它不會查找姓名。 – BrenBarn

+1

你能顯示完整的錯誤信息嗎? – BrenBarn

回答

1

也許你所得到的錯誤

global name v_amount is not defined 

這是因爲,在這段代碼,

v_amount= 5000 

def set_v_to_something_else(): 
    global v 
    v_amount=v_amount-1000 
    v.set(v_amount) 

當Python解析功能set_v_to_something_else,它標誌着v_amount局部變量,因爲它出現在賦值的左側:

v_amount=v_amount-1000 

後來,當函數被調用,因爲Python的問候v_amount作爲局部變量,它會首先嚐試評估賦值語句的右側,並發現v_amount未定義。 (請記住,它是在局部名字空間,而不是全局命名空間尋找它)

的解決方法是添加global v_amount裏面的函數:

def set_v_to_something_else(): 
    global v_amount 
    v_amount = v_amount-1000 
    v.set(v_amount) 

您還可以刪除

global v 

,因爲您沒有爲v分配新值。 v.set僅僅是調用v的方法。

0
v_amount= 5000 

# you need to define variable 'v' here, 
# before you define function that uses it 

def set_v_to_something_else(): 
    global v 
    v_amount=v_amount-1000 
    v.set(v_amount) 

v = StringVar() 
v.set(str(v_amount)) 

#create button that will allow v label to be set to something else 

vbutton = Button(root, text = "change v", command = set_v_to_something_else).pack() 
vlabel = Label(root, textvariable=v).pack() 
+0

不,你不需要在定義使用v的函數之前定義v。 –

+0

它適用於我。 – codeforfood

+0

@ user2556952:只有更多的代碼比你向我們展示的要多,否則你得到的錯誤不是你告訴我們的。您發佈的代碼不會給出您所說的錯誤,因此這段代碼也不會給出錯誤也不足爲奇。 –

相關問題