PySide/PyQt 中的 QtConcurrent
QtConcurrent in PySide/PyQt
我正在尝试确定子类化 QtConcurrent 并在其中编写 运行 方法是否可行:
class Task(QtCore.QtConcurrent):
def run(self, function):
function()
还是完全没用?
完全没用,因为QtConcurrent是命名空间,不是class。
此外,PyQt 和 PySide 都不提供 QtConcurrent
提供的任何功能,因为它们都是基于模板的,因此无法包装。
PS:您链接到的 PySide 文档是针对 ReduceOption 枚举的。由于该枚举是否在 QtConcurrent
命名空间之外有任何用途值得怀疑,这可能是 PySide 包含它的错误。
您要找的class是QRunnable。
我在 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 允许嵌套函数和 类 相互嵌套!
我正在尝试确定子类化 QtConcurrent 并在其中编写 运行 方法是否可行:
class Task(QtCore.QtConcurrent):
def run(self, function):
function()
还是完全没用?
完全没用,因为QtConcurrent是命名空间,不是class。
此外,PyQt 和 PySide 都不提供 QtConcurrent
提供的任何功能,因为它们都是基于模板的,因此无法包装。
PS:您链接到的 PySide 文档是针对 ReduceOption 枚举的。由于该枚举是否在 QtConcurrent
命名空间之外有任何用途值得怀疑,这可能是 PySide 包含它的错误。
您要找的class是QRunnable。
我在 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 允许嵌套函数和 类 相互嵌套!