113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
|
|
# UI 界面显示问题修复总结
|
|||
|
|
|
|||
|
|
## 问题描述
|
|||
|
|
|
|||
|
|
1. **登录界面问题**:内容显示不完整或布局有问题
|
|||
|
|
2. **主界面左侧面板问题**:设备信息、连接配置、控制按钮等组件不显示
|
|||
|
|
|
|||
|
|
## 根本原因分析
|
|||
|
|
|
|||
|
|
### 问题1:登录界面
|
|||
|
|
- **原因**:创建了一个多余的 `content_widget` 容器,然后在其上添加 `content_layout`
|
|||
|
|
- **影响**:导致布局嵌套过深,对话框宽度可能太小,内容无法正确显示
|
|||
|
|
|
|||
|
|
### 问题2:主窗口左侧面板
|
|||
|
|
- **原因**:添加了 `QScrollArea` 并设置 `setWidgetResizable(False)`
|
|||
|
|
- **影响**:QScrollArea 不会自动调整 widget 的大小,导致 left_panel 中的组件无法显示
|
|||
|
|
|
|||
|
|
## 解决方案
|
|||
|
|
|
|||
|
|
### 修复1:登录界面 (login_dialog.py)
|
|||
|
|
|
|||
|
|
**之前的结构**:
|
|||
|
|
```
|
|||
|
|
main_layout (0,0,0,0)
|
|||
|
|
└── content_widget (QWidget, 60,50,60,50)
|
|||
|
|
└── content_layout
|
|||
|
|
├── title
|
|||
|
|
├── form
|
|||
|
|
└── buttons
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修复后的结构**:
|
|||
|
|
```
|
|||
|
|
main_layout (60,50,60,50)
|
|||
|
|
├── title
|
|||
|
|
├── form
|
|||
|
|
└── buttons
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**具体改动**:
|
|||
|
|
- 删除了 `content_widget` 容器
|
|||
|
|
- 直接使用 `main_layout` 作为 `content_layout`
|
|||
|
|
- 将 margins 从 main_layout(0,0,0,0) + content_widget(60,50,60,50) 简化为 main_layout(60,50,60,50)
|
|||
|
|
- 设置对话框背景色为白色
|
|||
|
|
|
|||
|
|
### 修复2:主窗口左侧面板 (main_window.py)
|
|||
|
|
|
|||
|
|
**之前的结构**:
|
|||
|
|
```
|
|||
|
|
splitter
|
|||
|
|
├── left_scroll (QScrollArea, setWidgetResizable=False)
|
|||
|
|
│ └── left_panel (QWidget)
|
|||
|
|
│ └── left_layout
|
|||
|
|
│ ├── device_group
|
|||
|
|
│ ├── conn_group
|
|||
|
|
│ ├── progress_group
|
|||
|
|
│ └── btn_layout
|
|||
|
|
└── right_panel
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**修复后的结构**:
|
|||
|
|
```
|
|||
|
|
splitter
|
|||
|
|
├── left_panel (QWidget)
|
|||
|
|
│ └── left_layout
|
|||
|
|
│ ├── device_group
|
|||
|
|
│ ├── conn_group
|
|||
|
|
│ ├── progress_group
|
|||
|
|
│ └── btn_layout
|
|||
|
|
└── right_panel
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**具体改动**:
|
|||
|
|
- 删除了 `QScrollArea` 容器
|
|||
|
|
- 直接将 `left_panel` 添加到 `content_splitter`
|
|||
|
|
- 保持原有的布局结构和尺寸限制
|
|||
|
|
|
|||
|
|
## 修改文件清单
|
|||
|
|
|
|||
|
|
| 文件 | 修改内容 | 影响 |
|
|||
|
|
|------|---------|------|
|
|||
|
|
| src/ui/login_dialog.py | 简化布局结构,移除多余容器 | 修复登录界面显示 |
|
|||
|
|
| src/ui/main_window.py | 移除QScrollArea,直接使用left_panel | 修复左侧面板组件显示 |
|
|||
|
|
|
|||
|
|
## 验证结果
|
|||
|
|
|
|||
|
|
✅ **登录对话框**
|
|||
|
|
- 尺寸:480×400
|
|||
|
|
- 用户名输入框:正常
|
|||
|
|
- 密码输入框:正常
|
|||
|
|
- 登录按钮:正常
|
|||
|
|
|
|||
|
|
✅ **主窗口组件**
|
|||
|
|
- 设备信息组件:✓
|
|||
|
|
- 连接配置组件:✓
|
|||
|
|
- 进度显示组件:✓
|
|||
|
|
- 测试项目表格:✓
|
|||
|
|
- 执行日志查看器:✓
|
|||
|
|
- 控制按钮:✓
|
|||
|
|
|
|||
|
|
## 关键要点
|
|||
|
|
|
|||
|
|
1. **简化总是更好** - 避免不必要的容器嵌套
|
|||
|
|
2. **QScrollArea 需谨慎** - 需要正确设置 `setWidgetResizable(True)` 或手动设置 widget 尺寸
|
|||
|
|
3. **直接操作布局** - 如果只是为了设置样式或边距,直接在主布局上操作会更清晰
|
|||
|
|
|
|||
|
|
## 后续建议
|
|||
|
|
|
|||
|
|
如果需要左侧面板支持滚动(当内容过多时),应该:
|
|||
|
|
1. 使用 `QScrollArea` 并设置 `setWidgetResizable(True)`
|
|||
|
|
2. 或者使用自定义的可滚动容器
|
|||
|
|
3. 确保 widget 的 `sizeHint()` 返回合适的尺寸
|