使用 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)!