In a pyside tutorial I see the following line in the QtGui.QComboBox example:
combo.activated[str].connect(self.onActivated)
What does the expression [str]
mean in this context? This is neither explained in the example, not on the pyside documentation. And also from the original Qt documentation it is not clear what the expression [str]
actually means.
I am well aware of indexing lists and dictionaries, but in the given context it seems a class method is indexed.
Here, activated
is an overloaded signal, and [str]
is indexing to the str
-typed overload.
The signal is overloaded for the same reason a function is considered overloaded in C++: There are two functions with the same name, taking different parameters:
void QComboBox::activated ( int index ) [signal]
void QComboBox::activated ( const QString & text ) [signal]
Python doesn't have the strongly-typed function overloading that C++ has. So instead, PyQt handles this by having a dictionary of slots to which you can connect. The key to this dictionary is the type
of the argument your handle will accept.
This example on the page that wastl linked to describes it well:
from PyQt4.QtGui import QComboBox
class Bar(QComboBox):
def connect_activated(self):
# The PyQt4 documentation will define what the default overload is.
# In this case it is the overload with the single integer argument.
self.activated.connect(self.handle_int)
# For non-default overloads we have to specify which we want to
# connect. In this case the one with the single string argument.
# (Note that we could also explicitly specify the default if we
# wanted to.)
self.activated[str].connect(self.handle_string)
def handle_int(self, index):
print "activated signal passed integer", index
def handle_string(self, text):
print "activated signal passed QString", text
Further Reading:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With