6

我试图弄清楚子类化 QtConcurrent并在其中编写一个运行方法是否可以工作:

class Task(QtCore.QtConcurrent):

     def run(self, function):
           function()

还是完全没用?

4

3 回答 3

16

它完全没用,因为QtConcurrent是一个命名空间,而不是一个类。

此外,PyQt 和 PySide 都不提供任何由 提供的功能QtConcurrent,因为它都是基于模板的,因此无法包装。

PS:您链接到的 PySide 文档用于ReduceOption枚举。由于该枚举是否在QtConcurrent命名空间之外有任何用途值得怀疑,因此 PySide 包含它可能是一个错误。

于 2015-09-03T15:52:50.533 回答
0

您正在寻找的课程是QRunnable

于 2018-04-24T07:26:03.673 回答
0

我在 PyQt5 中遇到了同样的问题。我想唯一的解决方案是在本地执行此操作:

def connect(self):
    class ConnectThread(QThread):
        def __init__(self, func):
            super().__init__()
            self.func = func
        def run(self):
            self.func()
    self.connectThread = ConnectThread(self._connect)
    self.connectThread.start()

def _connect(self):
    if self._driver is None:
        uri = self.uriString()
        if uri and self.user and self.password:
            self.statusMessage.emit("Connecting to the Graph Database....", -1, "color:blue;")
            try:
                self._driver = GraphDatabase.driver(uri, auth=(self.user, self.password))
                self.statusMessage.emit("Connected!", 5000, "color:green;")
            except Exception as e:
                self.clearStatusMessage.emit()
                Error(str(e)).exec_()
                if __debug__:
                    raise e

并记住将线程设置为成员变量:self.thread = ...否则您的线程引用将超出范围,并且很可能线程对象被删除。

您还可以将您的函数调用移动到它的本地定义中,因为 Python 允许嵌套函数和类相互嵌套!

于 2019-03-04T22:23:57.617 回答