- 问题描述
- 解决方案
- 总结
最近使用threading.Thread时遇到了奇怪的报错
def start1(RecordText:tk.Text):
print(type(RecordText))
for i in range(0,20):
if(i>0):
RecordText.delete("%s-1l"%INSERT, INSERT)
RecordText.insert(END,"*"*i+"n")
time.sleep(1)
###省略了class的定义
def __EnsureButton_command(self):
th=threading.Thread(target=start1,args=(self.RecordText))
th.start()
之后在窗口中调用此函数便会报错
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:Users13902AppDataLocalProgramsPythonPython38libthreading.py", line 932, in _bootstrap_inner
self.run()
File "C:Users13902AppDataLocalProgramsPythonPython38libthreading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "C:Users13902AppDataLocalProgramsPythonPython38libtkinter__init__.py", line 1643, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: can only concatenate str (not "int") to str
我很好奇~,明明字符串那块语法是对的,为什么会报这种错误?
试图上网查这个错,未果,看来只有我会犯这个错
后来上网查了threading.Thread()函数,发现少写了个逗号
#wrong! th1=threading.Thread(target=start1,args=(self.RecordText)) #right! th2=threading.Thread(target=start1,args=(self.RecordText,))
也就是说args参数如果只写一个变量,也要在后面加个逗号。
这点可能与内部实现有关,有时间可以研究一下
使用threading.Thread()时,args参数哪怕只放一个变量,也要加个逗号。
希望下次不再犯此类错误。



