start(self, priority: QThread.Priority = QThread.InheritPriority): argument 1 has unexpected type 'str'
时间: 2024-03-28 14:42:14 浏览: 150
这个错误提示是因为你传入的参数类型不正确,应该是 QThread.Priority 类型,而你传入了一个字符串类型。
你可以检查一下传入的参数是否正确,或者将参数改为正确的类型。例如,如果你想使用 QThread.InheritPriority 作为参数,可以这样调用 start() 方法:
```
thread = QThread()
thread.start(QThread.InheritPriority)
```
这样就能够正确地启动线程了。
相关问题
class Worker(QObject): mySignal = pyqtSignal() def init(self): super().init() def run(self): self.mySignal.emit() class MyRunnable(QRunnable): def init(self, func,*param): super().init() self.func = func self.param = param def run(self): self.func(self.param[0][0],self.param[0][1]) class test(QWidget): def init(self): super().init() self.name = 'name' self.setWindowTitle('测试') self.initUI() def initUI(self): self.label = QLabel(self) thread = QThread() worker = Worker() worker.moveToThread(thread) worker1 = Worker() worker1.moveToThread(thread) worker2 = Worker() worker2.moveToThread(thread) threadPool = QThreadPool() task1 = MyRunnable(self.func1, (1, 2)) task2 = MyRunnable(self.func2, (2, 2)) task3 = MyRunnable(self.func3, (3, 2)) #thread.started.connect(task1) worker.mySignal.connect(task1.run) worker1.mySignal.connect(task2.run) worker2.mySignal.connect(task3.run) threadPool.start(worker) threadPool.start(worker1) threadPool.start(worker2) threadPool.waitForDone() def func1(self,x,y): print(x+y) def func4(): self.label.setText(str(x+y)) func4() time.sleep(1) def func2(self, x,y): print(x + y) self.label.setText(str(x + y)) time.sleep(1) def func3(self, x,y): print(x + y) self.label.setText(str(x + y)) time.sleep(1) app = QApplication(sys.argv) main = test() main.show() sys.exit(app.exec_())报警:TypeError: arguments did not match any overloaded call: 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'怎么解决?
在这段代码中,你使用了错误的类型将 `worker`、`worker1` 和 `worker2` 对象传递给 `threadPool.start()` 方法。正确的类型应该是 `MyRunnable` 对象,因为 `QThreadPool` 的 `start()` 方法需要一个 `QRunnable` 对象作为参数。
为了解决这个问题,你需要将三个 `Worker` 对象分别替换为对应的 `MyRunnable` 对象。修改代码如下:
```
task1 = MyRunnable(self.func1, (1, 2))
task2 = MyRunnable(self.func2, (2, 2))
task3 = MyRunnable(self.func3, (3, 2))
threadPool.start(task1)
threadPool.start(task2)
threadPool.start(task3)
```
这样就可以将 `MyRunnable` 对象传递给 `QThreadPool` 的 `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_())
```
希望这些示例代码可以帮助你解决问题。
阅读全文