Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
192 views
in Technique[技术] by (71.8m points)

python - PySide: Returning a value from a slot

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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".


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...