PyQT按钮单击了名称

Pro*_*ons 11 qt triggers pyqt button

我已动态创建按钮(QtoolButton)gridLayout的PyQt的.如何获取布局中单击按钮的名称?

我手头上不知道这个名字.是否有任何触发器可以完成任务?

提前致谢.

Gar*_*hes 24

您可以调用self.sender()连接到按钮事件的函数来获取触发事件的对象.从那里你可以调用对象的objectName()方法来获取名称.

这是一个快速示例 - 小部件有10个按钮,单击按钮将更新标签的文本以显示按钮名称.

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_())
Run Code Online (Sandbox Code Playgroud)

  • @ Gary,但是 `.objectName()` 返回的是 `None`。知道为什么吗? (3认同)