You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ursina的DropdownButton中修改字体与文本宽度?

修改Ursina中DropdownMenuButton的字体与文本宽度

一、修改字体

Ursina的DropdownMenuButton继承自Button,内部文本由Text组件渲染,你可以通过两种方式修改字体:

1. 单个按钮单独设置字体

创建DropdownMenuButton时,直接通过text_kwargs传递font参数,可指定内置字体名称或自定义字体文件路径:

from ursina import *
from ursina.prefabs.dropdown_menu import DropdownMenu, DropdownMenuButton

app = Ursina()

def val_but(txt):
    print(txt)

DropdownMenu(text='File', buttons=(
    # 用内置'consola'字体,也可传自定义路径如'assets/fonts/my_font.ttf'
    DropdownMenuButton('New', on_click=lambda: val_but('New'), text_kwargs={'font': 'consola'}),
    DropdownMenuButton('Open', text_kwargs={'font': 'consola'}),
    DropdownMenu('Reopen Project', buttons=(
        DropdownMenuButton('Project 1', text_kwargs={'font': 'consola'}),
        DropdownMenuButton('Project 2', text_kwargs={'font': 'consola'}),
        ), text_kwargs={'font': 'consola'}),
    DropdownMenuButton('Save', text_kwargs={'font': 'consola'}),
    DropdownMenu('Options', buttons=(
        DropdownMenuButton('Option a', text_kwargs={'font': 'consola'}),
        DropdownMenuButton('Option b', text_kwargs={'font': 'consola'}),
        ), text_kwargs={'font': 'consola'}),
    DropdownMenuButton('Exit', text_kwargs={'font': 'consola'}),
    ), scale=(.2,.05), text_origin=(0,0), position=(-.58,.37))

app.run()

2. 自定义子类统一设置字体

如果要给所有下拉按钮统一配置字体,可创建自定义子类避免重复代码:

from ursina import *
from ursina.prefabs.dropdown_menu import DropdownMenu, DropdownMenuButton

# 自定义下拉按钮类,默认使用指定字体
class CustomDropdownButton(DropdownMenuButton):
    def __init__(self, text='', **kwargs):
        super().__init__(text, **kwargs)
        self.text_entity.font = 'consola'  # 替换为目标字体

app = Ursina()

def val_but(txt):
    print(txt)

DropdownMenu(text='File', buttons=(
    CustomDropdownButton('New', on_click=lambda: val_but('New')),
    CustomDropdownButton('Open'),
    DropdownMenu('Reopen Project', buttons=(
        CustomDropdownButton('Project 1'),
        CustomDropdownButton('Project 2'),
        ), text_kwargs={'font': 'consola'}),
    CustomDropdownButton('Save'),
    DropdownMenu('Options', buttons=(
        CustomDropdownButton('Option a'),
        CustomDropdownButton('Option b'),
        ), text_kwargs={'font': 'consola'}),
    CustomDropdownButton('Exit'),
    ), scale=(.2,.05), text_origin=(0,0), position=(-.58,.37))

app.run()

二、调整文本宽度

文本宽度调整分两种场景:自动换行适配按钮,或拉伸/压缩文本显示宽度:

1. 设置文本自动换行

通过text_kwargs传递wrap_width参数,文本长度超过指定值时自动换行:

# 根据按钮scale调整wrap_width数值,确保文本在按钮内换行
DropdownMenuButton('Long Text Example', text_kwargs={'wrap_width': 0.15})

2. 拉伸/压缩文本显示宽度

可修改文本实体的scale_x或直接设置width属性:

# 方式1:创建时通过text_kwargs设置横向拉伸
DropdownMenuButton('Stretched Text', text_kwargs={'scale_x': 1.5})

# 方式2:在自定义子类中全局修改
class CustomDropdownButton(DropdownMenuButton):
    def __init__(self, text='', **kwargs):
        super().__init__(text, **kwargs)
        self.text_entity.scale_x = 1.5  # 横向拉伸文本
        # 也可设置固定宽度:self.text_entity.width = 0.2

3. 调整按钮本身宽度

若要让按钮适配文本长度,可修改DropdownMenuButton的scale_x或width:

# 增大按钮宽度以适配长文本
DropdownMenuButton('Wide Button', scale=(0.3, 0.05))

注意点

  • 你的代码中on_click = val_but('New')会在初始化时直接执行函数,需改成on_click=lambda: val_but('New')才能实现点击触发。
  • 使用自定义字体时,需确保字体文件路径正确,Ursina默认优先从项目根目录的assets/fonts文件夹查找。

内容的提问来源于stack exchange,提问作者EMILIO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 11:05:22