112 lines
3.5 KiB
Python
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() |