使用 sender() 获取按钮文本总是返回错误 — 'NoneType' 对象没有属性 'text'

Posted

技术标签:

【中文标题】使用 sender() 获取按钮文本总是返回错误 — \'NoneType\' 对象没有属性 \'text\'【英文标题】:get button text using sender() always return error — 'NoneType' object has no attribute 'text'使用 sender() 获取按钮文本总是返回错误 — 'NoneType' 对象没有属性 'text' 【发布时间】:2020-05-16 12:36:23 【问题描述】:

使用Qt Designer创建了Push Button,然后代码:

# import ...
class Test:
    def __init__(self):
        qfile = QFile("test.ui")
        qfile.open(QFile.ReadOnly)
        qfile.close()
        self.ui = QUiLoader().load(qfile)
        self.ui.pushButton.clicked.connect(self.buttonClicked)

    def buttonClicked(self):
        print(self.ui.sender().text())

app = QApplication([])
test = Test()
test.ui.show()
app.exec_()

当我点击按钮时,收到错误消息:

AttributeError: 'NoneType' object has no attribute 'text'

如何获取按钮文本?

【问题讨论】:

【参考方案1】:

sender() 方法返回发出信号的对象,如果调用它的地方是异步调用的方法,也只有该方法所属类的 sender() 有效。

考虑到上述情况,Test类必须是QObject,并且必须调用它的sender()方法:

import os

from PySide2 import QtCore, QtWidgets, QtUiTools

CURRENT_DIRECTORY = os.path.dirname(os.path.realpath(__file__))


class Test(QtCore.QObject):
    def __init__(self):
        super().__init__()
        filename = os.path.join(CURRENT_DIRECTORY, "test.ui")
        qfile = QtCore.QFile(filename)
        qfile.open(QtCore.QFile.ReadOnly)
        qfile.close()
        self.ui = QtUiTools.QUiLoader().load(qfile)
        self.ui.pushButton.clicked.connect(self.buttonClicked)

    @QtCore.Slot()
    def buttonClicked(self):
        print(self.sender().text())


if __name__ == "__main__":

    app = QtWidgets.QApplication([])
    test = Test()
    test.ui.show()
    app.exec_()

【讨论】:

以上是关于使用 sender() 获取按钮文本总是返回错误 — 'NoneType' 对象没有属性 'text'的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 Swift 3.0 中按钮的当前标题,ios 使用 sender.titleForState(.Normal)!

从 php 中的文本输入中获取 CRLF

点击时更改按钮的文本颜色

怎么取得repeater中其中一个文本框的值

UITextField 总是返回 nil

失去理智导致获取核心数据总是返回错误