报错:Traceback (most recent call last): File "C:\Users\MH1345879\PycharmProjects\pythonProject2\2.py", line 229, in <module> window = MainWindow() ^^^^^^^^^^^^ File "C:\Users\MH1345879\PycharmProjects\pythonProject2\2.py", line 18, in __init__ self.init_ui() File "C:\Users\MH1345879\PycharmProjects\pythonProject2\2.py", line 81, in init_ui self.select_all_checkbox.stateChanged.connect(self.toggle_all_models) ^^^^^^^^^^^^^^^^^^^^^^ AttributeError: 'MainWindow' object has no attribute 'toggle_all_models'
时间: 2025-07-05 20:11:57 浏览: 37
这个错误说明你在 `MainWindow` 类中没有定义 `toggle_all_models` 方法,或者拼写不一致(比如大小写、拼写错误等)。从你贴出的报错信息来看:
```
AttributeError: 'MainWindow' object has no attribute 'toggle_all_models'
```
这表示你已经正确连接了信号与槽(`self.select_all_checkbox.stateChanged.connect(...)`),但目标函数 `toggle_all_models` 并不存在于你的类中。
---
### ✅ 解决方法
你需要在 `MainWindow` 类中添加如下方法:
```python
from PyQt5.QtCore import Qt # 如果还没有导入,请加上这一行
...
def toggle_all_models(self, state):
"""根据全选复选框的状态切换所有Model复选框"""
for cb in self.model_checks.values():
cb.setChecked(state == Qt.Checked)
```
确保:
- 这个方法是 `MainWindow` 类的一个成员函数。
- 方法名完全一致:`toggle_all_models`。
- 使用了正确的参数 `self, state`。
- 导入了 `Qt` 模块。
---
### ✅ 正确代码片段汇总(再次确认)
#### 在文件顶部加上:
```python
from PyQt5.QtCore import Qt
```
#### 在 `MainWindow` 类中添加:
```python
def toggle_all_models(self, state):
for cb in self.model_checks.values():
cb.setChecked(state == Qt.Checked)
```
#### Models 多选框部分保持不变:
```python
# Models多选框
models = ['STAR', 'JEDI', 'BISON', 'MONGOOSE', 'BADGER',
'BUFFALO', 'FALCON', 'GRIFFIN', 'KANGOL', 'COUGAR',
'MEERKAT']
self.model_checks = {}
model_group = QWidget()
model_layout = QVBoxLayout(model_group)
# 添加“全选/取消全选”复选框
self.select_all_checkbox = QCheckBox("全选/取消全选")
model_layout.addWidget(self.select_all_checkbox)
self.select_all_checkbox.stateChanged.connect(self.toggle_all_models) # 注意不要加括号!
for item in models:
cb = QCheckBox(item)
model_layout.addWidget(cb)
self.model_checks[item] = cb
main_layout.addWidget(QLabel('Models:'))
main_layout.addWidget(model_group)
```
---
### ❗常见错误点总结:
| 错误 | 原因 | 解决方式 |
|------|------|----------|
| `toggle_all_models` 未定义 | 忘记添加该方法 | 添加 `def toggle_all_models(self, state): ...` |
| `state` 参数错误 | 方法签名不对 | 确保方法接受 `self, state` 两个参数 |
| `Qt` 未导入 | 报错 `Qt is not defined` | 加上 `from PyQt5.QtCore import Qt` |
| `connect()` 写成带括号形式 | 如 `connect(self.toggle_all_models())` | 改为 `connect(self.toggle_all_models)` |
---
###
阅读全文
相关推荐



















