1
0
forked from Rowland/EG
EG/demo/GUI_README.md
2025-07-02 09:49:59 +08:00

262 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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功能
祝您学习愉快!🎮