2013-07-09 46 views
1

我在更新tkinter中的標籤時遇到問題。我查看了關於這個錯誤的所有其他問題,但沒有一個與我的情況有關。總之,這裏是我的代碼:'var'是該函數的無效關鍵字參數? (Tkinter和Python)

var = 100 

v = StringVar() 
v.set(str(var)) 
varLabel=Label(app, textvariable=v).grid(row=0) 

#this is where i update my label 
#also, this is where i get the error 
v.set(str(var = var - dictionary[number])) 

錯誤說:

'var' is an invalid keyword argument for this function 

任何想法,我做錯了什麼?

感謝

+0

python中的'str'函數沒有'var'關鍵字參數。 – alecxe

+0

它看起來像你來自C派生語言(C++,Java,C#,D等等)。與那些語言不同,Python中的賦值不是表達式。您不能在函數調用或時間條件或其他任何地方爲變量賦值,你只能做它自己的聲明。 – abarnert

回答

4

您試圖同時做太多的事情。

試試這個

var = var - dictionary[number] 
v.set(str(var)) 

OR

var = str(var - dictionary[number]) 
v.set(var) 
3

的錯誤表示str()調用不採取var關鍵字參數。您使用的語法通常用於關鍵字參數。

分配分別:

var = var - dictionary[number] 
v.set(str(var)) 
1

的錯誤是在這裏:

v.set(str(var = var - dictionary[number]))

我想你期望的解釋來計算var - dictionary[number];將該值分配到var;然後將var的值作爲第一個參數傳遞給str()函數。

第一部分確實有效 - 譯員確實計算var - dictionary[number]。但是,不是將該值放入var,而是將該值作爲名爲var的參數傳遞給str函數。由於字符串函數不期望名爲var的參數,因此您會看到您所看到的錯誤。

下面是一個快速的iPython解釋器會話,顯示了這一點。

In [1]: def func1(var): 
    ...:  print var 
    ...: 

In [2]: def func2(notvar): 
    ...:  print notvar 
    ...: 

In [3]: var=12 

In [4]: func1(var=var+3) 
15 

In [5]: func2(var=var+3) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-5-7e6ea7fc32e9> in <module>() 
----> 1 func2(var=var+3) 

TypeError: func2() got an unexpected keyword argument 'var' 

In [6]:print var 
12 

您可以看到,func1確實需要一個名爲var的參數來處理這個問題。 func2,不期望一個名爲var的參數,引發一個關於意外關鍵字的TypeError。 var的值不變。

相關問題