2013-10-09 31 views
1
def message(text): 
    windll.user32.MessageBoxW(0, text, 'Message', 0x20) 
def otherfunc(startDistance, hops, i, formats, j): 
    text = str('Distance: ' + str((startDistance + (hops * i))) + '. Format: ' + formats[j]) 
    threading.Thread(target=message, args=(text)).start() 

由於某些原因,此代碼會產生函數獲取29個參數的錯誤,即使您可以清楚地看到文本是字符串。 任何人有一個想法如何解決? 此外,當調用消息()沒有線程時,它工作正常。問題是它需要它在一個線程中。TypeError:message()需要1個位置參數(給出29)

+0

你知道'(文本)'和'text'是一樣嗎?這不是一個元組。爲此你需要'(文字,)'。 –

回答

4

args必須是一個序列,但你傳遞的字符串:

threading.Thread(target=message, args=(text)).start() 

添加逗號:

threading.Thread(target=message, args=(text,)).start() 

您至少需要一個逗號,使一個元組;在很多情況下的括號是可選的:

>>> ('foo') 
'foo' 
>>> 'foo', 
('foo',) 

沒有逗號,你傳遞的29個個別字符序列的message()功能。

+0

到目前爲止,我已經與多參數線程一起工作,不知道這是必要的。謝謝! –

+0

爲什麼沒有元組(文本)工作 – Ben

+1

@Ben:因爲它將* iterable *轉換爲元組中的單獨元素。由於'text'是一個字符串,你可以得到一個包含單個字符的元組,而不是單個元素。 –

相關問題