PySide6报错:'bool'对象无'specificaccount_radiobutton'属性
问题分析与解决方案
错误原因
你遇到的AttributeError: 'bool' object has no attribute 'specificaccount_radiobutton',核心问题出在信号连接方式错误:
- 在
__init__里,你把类的未绑定方法赋值给全局变量,导致toggled信号触发时,会将按钮的选中状态(布尔值)作为第一个参数传入方法,此时方法里的self被替换成了这个布尔值,自然找不到控件属性。 - 完全没必要用全局变量中转方法,直接绑定实例方法即可。
修正后的代码
from PySide6.QtWidgets import (QGroupBox, QGridLayout, QLabel, QRadioButton, QComboBox, QHBoxLayout) class Banking(): def __init__(self) -> None: # 移除冗余的全局变量代码 pass def Draw(self): self.bankaccounts_groupbox = QGroupBox("Banking") self.bankaccounts_layout = QGridLayout(self.bankaccounts_groupbox) self.bankaccounts_layout.addWidget(self.Filter(), 0, 0) self.bankaccounts_groupbox.setFixedHeight(500) return self.bankaccounts_groupbox def Filter(self): self.filter_groupbox = QGroupBox() self.filter_layout = QHBoxLayout(self.filter_groupbox) self.allaccounts_radiobutton = QRadioButton("All") self.allaccounts_radiobutton.setChecked(True) # 直接连接到实例方法 self.allaccounts_radiobutton.toggled.connect(self.all_accounts_selected) self.specificaccount_radiobutton = QRadioButton("Specific") # 直接连接到实例方法 self.specificaccount_radiobutton.toggled.connect(self.specific_account_selected) self.specificaccount_combobox = QComboBox() self.specificaccount_combobox.setEnabled(False) self.filter_layout.addWidget(self.allaccounts_radiobutton) self.filter_layout.addWidget(self.specificaccount_radiobutton) self.filter_layout.addWidget(self.specificaccount_combobox) self.filter_layout.addStretch(1) self.filter_groupbox.setFixedHeight(self.filter_groupbox.sizeHint().height()) return self.filter_groupbox def all_accounts_selected(self, is_checked): print("test1") # 选中"All"时禁用下拉框即可,无需禁用单选按钮 self.specificaccount_combobox.setEnabled(False) self.specificaccount_combobox.clear() def specific_account_selected(self, is_checked): print("test2") # 选中"Specific"时启用下拉框 self.specificaccount_combobox.setEnabled(True) self.specificaccount_combobox.addItems(["test1", "test2"])
关键修改点
- 删除
__init__中全局变量的定义与赋值,直接通过self调用实例方法,确保方法执行时self指向Banking类实例,能正确访问控件属性。 - 修正
specific_account_selected方法的逻辑:应该启用/禁用下拉框,而非单选按钮(单选按钮本身需要保持可选择状态)。
内容的提问来源于stack exchange,提问作者relu
相关产品推荐
相关产品推荐

