【发布时间】:2023-03-05 02:40:01
【问题描述】:
我正在尝试为我的 PySide GUI 库创建简单、通用的方法调用:
class GUI(QApplication):
def __init__(self, *args, **kwargs):
super(GUI, self).__init__()
self.gui_signal = Signal()
self.gui_signal.connect(self.method_call)
使用args获取对象、方法和调用object.method的槽:
@Slot()
def method_call(self, obj, method_name, *args, **kwargs):
method = getattr(obj, method_name)
if method:
return method(*args, **kwargs)
else:
return None
这应该发出那个棘手的插槽:
def anymethod(self, obj, method_name, *args, **kwargs):
self.gui_signal.emit(obj, method_name, *args, **kwargs)
这是另一个工作线程,例如更新进度条
class MyApp(object):
...
def update_progress(self):
perc = (self.done * 100) / self.total
self.gui.anymethod(self.progressBar, 'setValue', int(perc))
我发现这种方法行不通,并且 args 以错误的方式传递。我该怎么做才能解决?
【问题讨论】:
-
@eyllanesc 出色的解决方案,非常感谢!
标签: python pyside qt-signals