Я пытаюсь создать простой универсальный вызов метода для моей библиотеки 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)
Слот для получения объекта, метода и вызова 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))
Я вижу, что этот подход не работает, и аргументы передаются неправильно.Что я должен сделать, чтобы исправить?