python - 类型错误:* 之后的 () 参数必须是可迭代的,而不是队列
问题描述
我正在前端工作,需要在单击按钮时将手形光标更改为繁忙的光标。但是我的代码是抛出“类型错误”。我只希望代码显示一个按钮,单击该按钮会从手形光标变为忙碌光标,然后返回正常光标。
这是我到目前为止尝试过的代码:
import threading
from threading import Thread
from threading import Event
import queue
sem=threading.Semaphore()
def setup_for_long_running_task(self):
print("start")
self.f1.config(cursor="wait") # Set the cursor to busy
sem.acquire()
return_que = queue.Queue(1)
workThread = Thread(target=lambda q, w_self: \
q.put(self.long_running_task()),
args=return_que)
workThread.start()
self.f1.after(5000,use_results_of_long_running_task(self,workThread,return_que)) # 500ms is half a second
sem.release()
print("stop")
def long_running_task(self):
Event().wait(3.0) # Simulate long running task
def use_results_of_long_running_task(self, workThread,return_que):
ThreadRunning = 1
while ThreadRunning:
Event().wait(0.1) # this is set to .1 seconds. Adjust for your process
ThreadRunning = workThread.is_alive()
while not return_que.empty():
return_list = return_que.get()
self.f1.config(cursor="")
错误信息:
TypeError: <lambda>() argument after * must be an iterable, not Queue.
Exception in thread Thread-7:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\threading.py", line 917, in
_bootstrap_inner
self.run()
File "C:\ProgramData\Anaconda3\lib\threading.py", line 865, in run
self._target(*self._args, **self._kwargs)
TypeError: <lambda>() argument after * must be an iterable, not Queue
解决方案
线程需要args
作为元组或列表(可迭代对象),即使您只有一个参数
args=(return_que,)
您lambda
需要两个参数lambda q, w_self:
,但您只有一个元素args
args=(return_que, ???)
但我不知道你想用作什么w_self
。
推荐阅读
- android - 带有 Google API 的 Android Studio 3.1.1 模拟器无法连接到互联网
- opencv - 如何在opencv中获取视频的总时间(以秒为单位)
- android - 使用 PDFium 库的 API 19 (4.4.2 Android) 的 Aquos 手机发生应用程序崩溃
- android - TimePicker可以在Android上使用没有标题吗
- javascript - 为什么 ({__proto__: []}) 在 JavaScript 中返回 Array 类型的结果
- r - 有没有办法检查 R 包中的每个函数只针对其自己的 roxygen2 注释块中的导入?
- scala - 如何一起使用 Circe Optics 和 Decode
- python - pox sdn mininet,计算 udp 数据包
- c++ - 我无法使用继承 setter 和 getter 返回 const char * 变量
- sql - 按没有在 SELECT 列表中的列对数据进行排序