PyQT Button Click Name

My buttons (QtoolButton) are dynamically created in gridLayout in pyQT. How can I get the name of the button pressed in the layout?

I can’t know the name before hand. Is there any trigger to complete the task?

Thanks in advance.

+6
source share
2 answers

You can call self.sender() in the function associated with the event of your button to get the object that raised the event. From there, you can call the objectName() method to get the name.

Here is an example: the widget has 10 buttons, and clicking on the button will update the shortcut text to display the name of the button.

 import sys from PyQt4.QtGui import QApplication, QWidget, QToolButton, QLabel, QVBoxLayout, QHBoxLayout class Widget(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) self.button_layout = QHBoxLayout() self.widget_layout = QVBoxLayout() for button_number in xrange(1, 11): button = QToolButton() button.setText(str(button_number)) button.setObjectName('Button%d' % button_number) button.released.connect(self.button_released) self.button_layout.addWidget(button) self.status_label = QLabel('No button clicked') self.widget_layout.addItem(self.button_layout) self.widget_layout.addWidget(self.status_label) self.setLayout(self.widget_layout) def button_released(self): sending_button = self.sender() self.status_label.setText('%s Clicked!' % str(sending_button.objectName())) if __name__ == '__main__': app = QApplication(sys.argv) widget = Widget() widget.show() sys.exit(app.exec_()) 
+17
source

I think you need to implement your icon class derived from QToolButton:
Like this:

 class IconLabel : public QToolButton { Q_OBJECT public: explicit IconLabel(QWidget *parent = 0); bool event (QEvent* e ); QString name; signals: void clicked_signal(QString); }; bool IconLabel::event (QEvent* e ) { if ( e->type() == QEvent::Paint) { return QToolButton::event(e); } if(e->type() == QEvent::MouseButtonPress) { emit clicked_signal(name); return true; } return true; } connect(iconlabel, SIGNAL(clicked_signal(QString)), this, SLOT(getClickedButtonName(QString))); 
-1
source

All Articles