EG/demo/basic_gui_demo.py
2025-07-02 09:49:59 +08:00

112 lines
3.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
PANDA3D 基础GUI演示
最简单的DirectGUI使用示例
"""
from direct.showbase.ShowBase import ShowBase
from direct.gui.DirectGui import DirectButton, DirectLabel
from direct.gui.OnscreenText import OnscreenText
from panda3d.core import TextNode
class BasicGUIDemo(ShowBase):
def __init__(self):
ShowBase.__init__(self)
# 设置背景颜色
self.setBackgroundColor(0.2, 0.4, 0.6)
# 尝试加载中文字体
self.chinese_font = self.loadChineseFont()
# 创建标题
self.title = OnscreenText(
text="PANDA3D DirectGUI 基础演示",
pos=(0, 0.8),
scale=0.1,
fg=(1, 1, 1, 1),
align=TextNode.ACenter,
font=self.chinese_font if self.chinese_font else None
)
# 创建一个简单按钮
self.button = DirectButton(
text="点击我!",
pos=(0, 0, 0.2),
scale=0.1,
command=self.buttonClicked,
frameColor=(0.2, 0.8, 0.2, 1),
text_font=self.chinese_font if self.chinese_font else None
)
# 创建标签显示状态
self.statusLabel = DirectLabel(
text="状态: 等待点击",
pos=(0, 0, -0.2),
scale=0.08,
frameColor=(0, 0, 0, 0),
text_fg=(1, 1, 0, 1),
text_font=self.chinese_font if self.chinese_font else None
)
# 创建退出按钮
self.exitButton = DirectButton(
text="退出",
pos=(0, 0, -0.5),
scale=0.08,
command=self.exitDemo,
frameColor=(0.8, 0.2, 0.2, 1),
text_font=self.chinese_font if self.chinese_font else None
)
# 点击计数器
self.clickCount = 0
print("PANDA3D 基础GUI演示启动成功!")
print("请点击窗口中的按钮来测试GUI功能")
def buttonClicked(self):
"""按钮点击处理函数"""
self.clickCount += 1
self.statusLabel['text'] = f"状态: 按钮被点击了 {self.clickCount}"
print(f"按钮被点击! 总共点击了 {self.clickCount}")
# 改变按钮颜色作为反馈
if self.clickCount % 3 == 0:
self.button['frameColor'] = (0.8, 0.2, 0.8, 1) # 紫色
elif self.clickCount % 3 == 1:
self.button['frameColor'] = (0.2, 0.8, 0.2, 1) # 绿色
else:
self.button['frameColor'] = (0.2, 0.2, 0.8, 1) # 蓝色
def exitDemo(self):
"""退出演示"""
print("用户选择退出")
self.userExit()
def loadChineseFont(self):
"""尝试加载中文字体"""
import os
font_paths = [
'/usr/share/fonts/truetype/wqy/wqy-microhei.ttc',
'/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc',
'/usr/share/fonts/truetype/arphic/ukai.ttc',
'/usr/share/fonts/truetype/arphic/uming.ttc',
]
for font_path in font_paths:
if os.path.exists(font_path):
try:
font = self.loader.loadFont(font_path)
if font:
return font
except:
continue
return None
if __name__ == "__main__":
print("正在启动PANDA3D基础GUI演示...")
demo = BasicGUIDemo()
demo.run()