无法从 Python 循环中创建的 Button 发送信号
Unable to send signal from Button created in Python loop
我正在尝试循环创建一系列按钮。每个按钮都有一个 ID 号作为它的文本,当单击按钮时,它应该将 ID 号发送到一个函数,该函数将打开一个存档的订单。此时我只想打印订单号,证明信号有效,每个按钮都连接到正确的订单号。
ui.cmdOpen = QtWidgets.QPushButton(ui.frOrdHist)
ui.cmdOpen.setGeometry(QtCore.QRect(269, line1Y, 61, 22))
ui.cmdOpen.setText(iOrderId)
ui.cmdOpen.setObjectName("cmdOpen")
ui.cmdOpen.clicked.connect(lambda button=ui.cmdOpen:displayOrder(ui, button))
def displayOrder(ui, button):
i = button.text()
print(i)
当我点击按钮时,我收到一条错误消息 "boolean object has no text attribute"
我尝试直接传递订单号,它会打印 "False" 所以仍然是一个布尔值。我不知道布尔值是从哪里来的,一定是信号有问题。
clicked signal 始终发送按钮的 checked 状态。所以这将用一个布尔值覆盖你的默认 button
参数,这就是你得到 AttributeError 的原因(即因为 bool
没有那个方法)。您应该改为这样建立连接:
ui.cmdOpen.clicked.connect(
lambda checked, button=ui.cmdOpen: displayOrder(ui, button))
PS:此问题的另一个常见来源是 QAction 的 triggered signal。如果您发现您的插槽接收到意外输入,总是值得检查 Qt 文档以查看信号的签名是否具有任何具有默认值的参数 - 即看起来像这样:
void QSomeClass::someSignal(bool param = false)
我正在尝试循环创建一系列按钮。每个按钮都有一个 ID 号作为它的文本,当单击按钮时,它应该将 ID 号发送到一个函数,该函数将打开一个存档的订单。此时我只想打印订单号,证明信号有效,每个按钮都连接到正确的订单号。
ui.cmdOpen = QtWidgets.QPushButton(ui.frOrdHist)
ui.cmdOpen.setGeometry(QtCore.QRect(269, line1Y, 61, 22))
ui.cmdOpen.setText(iOrderId)
ui.cmdOpen.setObjectName("cmdOpen")
ui.cmdOpen.clicked.connect(lambda button=ui.cmdOpen:displayOrder(ui, button))
def displayOrder(ui, button):
i = button.text()
print(i)
当我点击按钮时,我收到一条错误消息 "boolean object has no text attribute"
我尝试直接传递订单号,它会打印 "False" 所以仍然是一个布尔值。我不知道布尔值是从哪里来的,一定是信号有问题。
clicked signal 始终发送按钮的 checked 状态。所以这将用一个布尔值覆盖你的默认 button
参数,这就是你得到 AttributeError 的原因(即因为 bool
没有那个方法)。您应该改为这样建立连接:
ui.cmdOpen.clicked.connect(
lambda checked, button=ui.cmdOpen: displayOrder(ui, button))
PS:此问题的另一个常见来源是 QAction 的 triggered signal。如果您发现您的插槽接收到意外输入,总是值得检查 Qt 文档以查看信号的签名是否具有任何具有默认值的参数 - 即看起来像这样:
void QSomeClass::someSignal(bool param = false)