start(self, QRunnable, priority: int = 0): argument 1 has unexpected type 'Worker' start(self, Callable[[], None], priority: int = 0): argument 1 has unexpected type 'Worker'什么意思哈?
时间: 2024-03-10 12:50:06 浏览: 28
这两个错误提示都是因为你传递给 `start()` 方法的第一个参数类型不符合要求。根据错误提示信息,你传递的是一个名为 `Worker` 的对象,而实际上 `start()` 方法的第一个参数应该是 `QRunnable` 类型的对象或者是一个不带参数并返回 `None` 的函数类型(即 `Callable[[], None]`)。
如果你想让 `Worker` 类支持 `start()` 方法,你需要将其定义为 `QRunnable` 的子类,并且实现 `run()` 方法。例如:
```
from PyQt5.QtCore import QRunnable
class Worker(QRunnable):
def __init__(self):
super().__init__()
def run(self):
# 在这里实现具体的工作逻辑
```
这样你就可以将 `Worker` 对象传递给 `start()` 方法了。
相关问题
TypeError: arguments did not match any overloaded call: start(self, QRunnable, priority: int = 0): argument 1 has unexpected type 'QThread' start(self, Callable[[], None], priority: int = 0): argument 1 has unexpected type 'QThread'怎么解决?
这个错误提示是因为你在调用 `start()` 方法时传入了一个 `QThread` 对象,但是 `start()` 方法的参数类型不匹配。
`start()` 方法有两个重载版本,一个是接受一个 `QRunnable` 对象作为参数,另一个是接受一个没有参数的可调用对象 `Callable[[], None]` 作为参数。
你需要根据你的需求选择正确的参数类型传入 `start()` 方法。如果你想要启动一个线程,可以通过创建一个 `QThread` 对象,将你的线程逻辑实现为一个 `QRunnable` 对象,然后将 `QRunnable` 对象传入 `start()` 方法来启动线程。
以下是一个示例代码:
```python
import sys
from PyQt5.QtCore import QRunnable, QThreadPool
class MyRunnable(QRunnable):
def run(self):
# 线程逻辑实现
print("Hello from thread")
if __name__ == '__main__':
app = QApplication(sys.argv)
runnable = MyRunnable()
QThreadPool.globalInstance().start(runnable)
sys.exit(app.exec_())
```
如果你想要启动一个没有参数的可调用对象,可以将该对象传入 `start()` 方法。以下是一个示例代码:
```python
import sys
from PyQt5.QtCore import QThreadPool
def my_function():
# 线程逻辑实现
print("Hello from thread")
if __name__ == '__main__':
app = QApplication(sys.argv)
QThreadPool.globalInstance().start(my_function)
sys.exit(app.exec_())
```
希望这些示例代码可以帮助你解决问题。
start(self, priority: QThread.Priority = QThread.InheritPriority): argument 1 has unexpected type 'str'
这个错误提示是因为你传入的参数类型不正确,应该是 QThread.Priority 类型,而你传入了一个字符串类型。
你可以检查一下传入的参数是否正确,或者将参数改为正确的类型。例如,如果你想使用 QThread.InheritPriority 作为参数,可以这样调用 start() 方法:
```
thread = QThread()
thread.start(QThread.InheritPriority)
```
这样就能够正确地启动线程了。