线程中的TypeError,函数接受1个参数,但在Python中给出了2个参数



我正在编写一个程序,该程序搜索指定的图像,如果它找到了该图像,那么它就会按照用户对程序说的去做。我在线程方面遇到了问题。我想不止一次地使用多线程,所以我编写了一个线程装饰器。我在两个不同的功能上使用它。第一个函数没有任何问题。但是我得到了第二个函数的TypeError。这是我的代码:


from PyQt5 import QtWidgets
from PyQt5 import QtCore
from PyQt5 import QtGui
from threading import Thread
from pynput.keyboard import Listener
from keyboard import is_pressed as pressed
from keyboard import press
from tkinter.messagebox import showinfo
from tkinter.messagebox import showerror
from tkinter.messagebox import showwarning
from tkinter.messagebox import askyesno
from python_imagesearch.imagesearch import imagesearch as search
from functools import cache
from GUI import *
import time
import os
import sys
import pyautogui as pyg
import playsound
class ImageSearch(QtWidgets.QWidget):
def thread(function):
def wrapper(*values, **kwvalues):
t1 = Thread(target=function, args=values, kwargs=kwvalues)
t1.start()
return wrapper
@thread
def Listen(self):
with Listener(on_press=self.onpress) as listener:
press(chr(92))
listener.join()

# It is the function that I am getting the error
@thread
def Start(self):
if self.ui.btnStartSearching.text() == "Search":
self.ui.btnStartSearching.setText("Stop")
self.ui.groupBox.setEnabled(False)

我得到的错误是:

self._target(*self._args, **self._kwargs)
TypeError: ImageSearch.Start() takes 1 positional argument but 2 were given

我做错了什么?

我刚刚找到了解决方案。我是这样称呼它的:

self.ui.btnStartSearching.clicked.connect(self.Start)

我试着使用"lambda"方法,它已经被解决了。我更改了上面的代码:

self.ui.btnStartSearching.clicked.connect(lambda: self.Start())

这就是我解决问题的方法。

@马蒂斯又找到了一个解决方案。我们需要将*args添加到要调用的函数中。

像这样:

self.ui.btnStartSearching.clicked.connect(self.Start)
def Start(self, *args):
#code

当CCD_ 2被添加到函数时。它被解决了。

相关内容

  • 没有找到相关文章

最新更新