PySide: Returning a value from a slot

心已入冬 提交于 2020-01-11 09:35:15

问题


The Pyside documentation states that slots can have return values, but I have yet to figure out how make it do so.

I couldn't find any usable code samples on this, so I've added a decorator as the docs suggest:

def testSlot(self):
    print('testSlot called')
    return 'RETURN VALUE RETURN VALUE RETURN VALUE'

And I'm trying to capture the return value like this:

ret = foo.testSignal.emit()

But it's not working. My test code, which you can find here, also crashes with this error output. Help is appreciated!

Edit: I've removed the decorator, which solves the crashing issue, but it still doesn't return the value I want it to return.

Running the script as is give me this:

foo.testSignal.emit()
testSlot called
True


回答1:


I'm afraid what you think is not possible. Signals and slots are loosely coupled together, so emitting a signal does not directly call a slot, and therefore cannot retrieve "its" return value.

This might be clearer if you think about this:

You can connect 2 different slots (of e.g. 2 different classes), which return different values, to one signal. Which of the two return values are supposed to reach the variable you try to assign?

What you probably mean is this: This is something completely different, and allows return values via "invoking" the method over the MetaObject system by "name".



来源:https://stackoverflow.com/questions/16555247/pyside-returning-a-value-from-a-slot

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!