# 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功能

祝您学习愉快！🎮 