【问题标题】:PyQT button clicked namePyQT 按钮单击的名称
【发布时间】:2012-10-14 14:05:39
【问题描述】:

我在 pyQT 中的gridLayout 中动态创建了按钮(QtoolButton)。 如何获取布局中点击的按钮名称?

我不能事先知道这个名字。 有什么触发器可以完成任务吗?

提前致谢。

【问题讨论】:

    标签: qt button triggers pyqt


    【解决方案1】:

    您可以在连接到您的按钮事件的函数中调用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_())
    

    【讨论】:

    • @Gary,但.objectName() 正在返回None。知道为什么吗?
    • 听起来您还没有设置对象名称。如果它是您想要的按钮文本,请尝试 .text()
    • @Gary,是的,我得到了按钮文本。如何找到QAction所附的QToolButton
    • 我不确定,我以前没有使用过 QToolButtons。查看文档我猜.defaultAction()?它至少返回一个QActionriverbankcomputing.co.uk/static/Docs/PyQt4/html/…
    • 只是添加,从QAction(QWidgetItem) 获取QToolButton(QWidget) 使用.getParent() 方法QWidgetItem
    【解决方案2】:

    我认为您必须实现从 QToolButton 派生的 iconlabel 类:
    像这样:

    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)));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 2018-06-22
    • 2016-01-30
    • 2017-12-09
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多