forked from Rowland/EG
262 lines
6.3 KiB
Markdown
262 lines
6.3 KiB
Markdown
# PANDA3D GUI功能测试文件
|
||
|
||
本项目包含了多个PANDA3D GUI功能的测试示例,帮助您了解和学习PANDA3D的GUI系统。
|
||
|
||
## 文件说明
|
||
|
||
### 1. `basic_gui_demo.py` - 基础GUI演示 🌟
|
||
**推荐从这个开始学习**
|
||
|
||
这是最简单的GUI示例,包含:
|
||
- 基本按钮(DirectButton)
|
||
- 文本标签(DirectLabel)
|
||
- 屏幕文本(OnscreenText)
|
||
- 简单的事件处理
|
||
- 按钮颜色变化效果
|
||
|
||
**运行方式:**
|
||
```bash
|
||
python3 basic_gui_demo.py
|
||
```
|
||
|
||
**功能:**
|
||
- 点击"点击我!"按钮可以看到计数增加
|
||
- 按钮颜色会循环变化
|
||
- 状态标签会显示当前点击次数
|
||
- 红色"退出"按钮可以关闭程序
|
||
|
||
---
|
||
|
||
### 2. `simple_gui_test.py` - 完整GUI组件测试 ⭐⭐
|
||
**中级学习示例**
|
||
|
||
包含更多GUI组件:
|
||
- 多种按钮样式
|
||
- 文本输入框(DirectEntry)
|
||
- 滑块控件(DirectSlider)
|
||
- 复选框(DirectCheckButton)
|
||
- 选项菜单(DirectOptionMenu)
|
||
- 实时状态更新
|
||
|
||
**运行方式:**
|
||
```bash
|
||
python3 simple_gui_test.py
|
||
```
|
||
|
||
**功能:**
|
||
- 测试按钮:点击增加计数
|
||
- 重置按钮:重置所有控件状态
|
||
- 文本输入:在输入框中输入文本并按回车
|
||
- 滑块:拖动查看数值实时变化
|
||
- 复选框:切换特殊模式
|
||
- 选项菜单:选择不同选项
|
||
- 状态栏显示当前操作
|
||
|
||
---
|
||
|
||
### 3. `gui_test.py` - 高级GUI功能展示 ⭐⭐⭐
|
||
**高级功能演示**
|
||
|
||
最复杂的GUI示例,包含:
|
||
- 所有DirectGUI组件
|
||
- 单选按钮组(DirectRadioButton)
|
||
- 滚动框架(DirectScrolledFrame)
|
||
- 密码输入框
|
||
- 复杂的事件处理系统
|
||
- 自定义字体加载
|
||
|
||
**运行方式:**
|
||
```bash
|
||
python3 gui_test.py
|
||
```
|
||
|
||
**注意:** 如果字体加载失败,程序可能无法正常运行。
|
||
|
||
---
|
||
|
||
### 4. `gui_3d_demo.py` - 3D空间GUI演示 🚀
|
||
**3D GUI概念展示**
|
||
|
||
展示如何在3D空间中使用GUI:
|
||
- 2D界面控制3D场景
|
||
- 3D空间中的文本元素
|
||
- 虚拟3D屏幕
|
||
- 3D对象与GUI交互
|
||
- 动画和场景控制
|
||
|
||
**运行方式:**
|
||
```bash
|
||
python3 gui_3d_demo.py
|
||
```
|
||
|
||
**功能:**
|
||
- 旋转场景:让3D对象旋转
|
||
- 变换颜色:改变场景颜色方案
|
||
- 重置:恢复初始状态
|
||
- 3D文本:在3D空间中显示文字
|
||
- 虚拟屏幕:3D空间中的信息显示板
|
||
|
||
---
|
||
|
||
### 5. `chinese_gui_test.py` - 中文字体支持测试 🇨🇳
|
||
**中文字体显示解决方案**
|
||
|
||
专门解决中文字体在PANDA3D中的显示问题:
|
||
- 自动检测和加载中文字体
|
||
- 支持OnscreenText中文显示
|
||
- 支持DirectButton中文显示
|
||
- 字体加载状态检测
|
||
- 多种中文字体路径支持
|
||
|
||
**运行方式:**
|
||
```bash
|
||
python3 chinese_gui_test.py
|
||
```
|
||
|
||
**功能:**
|
||
- 测试中文字体在各种GUI组件中的显示
|
||
- 显示字体加载状态和建议
|
||
- 演示正确的中文字体使用方法
|
||
|
||
### 📊 中文字体修复状态
|
||
|
||
| 文件 | 修复状态 | 支持组件 |
|
||
|------|----------|----------|
|
||
| `chinese_gui_test.py` | ✅ 完成 | OnscreenText, DirectButton |
|
||
| `gui_test.py` | ✅ 完成 | 所有DirectGUI组件 |
|
||
| `simple_gui_test.py` | ✅ 完成 | 基础GUI组件 |
|
||
| `basic_gui_demo.py` | ✅ 完成 | 基础组件 |
|
||
| `gui_3d_demo.py` | ✅ 完成 | 2D/3D文本组件 |
|
||
|
||
---
|
||
|
||
## PANDA3D GUI系统概述
|
||
|
||
### DirectGUI 组件
|
||
|
||
PANDA3D的DirectGUI系统提供了以下主要组件:
|
||
|
||
1. **DirectButton** - 按钮
|
||
- 可自定义颜色、大小、文本
|
||
- 支持点击事件处理
|
||
|
||
2. **DirectLabel** - 标签
|
||
- 显示静态文本
|
||
- 可设置背景和文字颜色
|
||
|
||
3. **DirectEntry** - 文本输入框
|
||
- 单行或多行文本输入
|
||
- 支持密码模式(obscured)
|
||
|
||
4. **DirectSlider** - 滑块
|
||
- 水平或垂直方向
|
||
- 数值范围可自定义
|
||
|
||
5. **DirectCheckButton** - 复选框
|
||
- 开/关状态切换
|
||
- 可绑定状态变化事件
|
||
|
||
6. **DirectRadioButton** - 单选按钮
|
||
- 单选按钮组
|
||
- 共享变量控制选择状态
|
||
|
||
7. **DirectOptionMenu** - 选项菜单
|
||
- 下拉选择列表
|
||
- 支持动态选项更新
|
||
|
||
8. **DirectScrolledFrame** - 滚动框架
|
||
- 可滚动的内容区域
|
||
- 支持垂直和水平滚动
|
||
|
||
### 3D空间GUI
|
||
|
||
PANDA3D还支持在3D空间中创建GUI元素:
|
||
|
||
1. **TextNode** - 3D文本节点
|
||
- 可放置在3D空间任意位置
|
||
- 支持billboard效果(总是面向相机)
|
||
|
||
2. **虚拟屏幕** - 使用CardMaker创建
|
||
- 3D空间中的平面显示区域
|
||
- 可在上面显示文本或图像
|
||
|
||
3. **混合GUI** - 2D控制3D场景
|
||
- 2D界面控制3D对象
|
||
- 实时交互和反馈
|
||
|
||
### 中文字体支持
|
||
|
||
PANDA3D的中文字体支持需要特殊处理:
|
||
|
||
1. **OnscreenText** - 屏幕文本
|
||
```python
|
||
text = OnscreenText(
|
||
text="中文文本",
|
||
font=chinese_font # 设置中文字体
|
||
)
|
||
```
|
||
|
||
2. **DirectButton** - 按钮文本
|
||
```python
|
||
button = DirectButton(
|
||
text="按钮文本",
|
||
text_font=chinese_font # 注意使用text_font参数
|
||
)
|
||
```
|
||
|
||
3. **字体加载** - 自动检测中文字体
|
||
```python
|
||
font_paths = [
|
||
'/usr/share/fonts/truetype/wqy/wqy-microhei.ttc',
|
||
'/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc'
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## 学习建议
|
||
|
||
1. **从基础开始**:先运行 `basic_gui_demo.py`
|
||
2. **逐步深入**:然后尝试 `simple_gui_test.py`
|
||
3. **探索高级功能**:学习 `gui_test.py` 中的复杂组件
|
||
4. **创新应用**:最后体验 `gui_3d_demo.py` 的3D GUI概念
|
||
|
||
## 常见问题
|
||
|
||
### Q: 程序无法启动?
|
||
A: 确保已正确安装PANDA3D:`pip install panda3d`
|
||
|
||
### Q: 字体加载失败?
|
||
A: 使用 `basic_gui_demo.py` 或 `simple_gui_test.py`,它们不依赖外部字体
|
||
|
||
### Q: 中文显示为方块?
|
||
A: 需要安装中文字体:
|
||
```bash
|
||
# 运行字体安装脚本
|
||
bash install_chinese_fonts.sh
|
||
|
||
# 或手动安装
|
||
sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei
|
||
```
|
||
|
||
### Q: 按钮中的中文无法显示?
|
||
A: DirectButton需要使用 `text_font` 参数来设置字体,参考 `chinese_gui_test.py` 的解决方案
|
||
|
||
### Q: 如何自定义GUI样式?
|
||
A: 查看代码中的 `frameColor`、`text_fg` 等参数设置
|
||
|
||
### Q: 如何添加更多交互?
|
||
A: 参考现有的事件处理函数,如 `onButtonClick()` 等
|
||
|
||
---
|
||
|
||
## 扩展学习
|
||
|
||
这些示例为您提供了PANDA3D GUI系统的基础。您可以:
|
||
|
||
1. 修改现有代码,尝试不同的参数设置
|
||
2. 组合不同的GUI组件创建自己的界面
|
||
3. 将GUI集成到您的3D应用程序中
|
||
4. 探索PANDA3D的其他高级GUI功能
|
||
|
||
祝您学习愉快!🎮 |