在Ursina引擎中fit_to_text()失效时,如何让Button适配Text?
针对你遇到的调用fit_to_text()后按钮远大于文本的问题,可尝试以下几种解决方案:
1. 修正文本分辨率设置
你全局设置了Text.default_resolution = WINDOW_HEIGHT * 2 * Text.size,这个放大倍数可能导致文本渲染尺寸被过度放大,进而让fit_to_text()计算出的按钮尺寸偏大。建议调整该值,或者在创建Button时单独指定合适的text_resolution:
self.button = Button( text=self.textinput, color=color.rgba(0,255,0,255), text_color=color.rgb(*self.unhovered), x=self.position[0], y=self.position[1], on_click=self.click, text_resolution=WINDOW_HEIGHT * Text.size # 移除多余的*2,或根据实际需求调整 ) self.button.fit_to_text()
2. 调整Button的内边距
多数UI框架的Button默认带有内边距,fit_to_text()会将这些内边距纳入按钮尺寸计算。如果你的Button类支持设置padding,可手动缩小内边距:
self.button.fit_to_text() self.button.padding = (4, 3) # 分别设置左右、上下内边距,数值按需调整
3. 优化字体行高与间距
部分字体自带较大的行高或字间距,会让fit_to_text()计算的包裹范围变大。可以尝试调整全局文本行高:
Text.line_height = 1.0 # 将行高设为紧贴文本的数值
也可以更换字体测试,确认是否是字体本身的问题。
4. 手动计算文本尺寸并设置按钮大小
如果fit_to_text()方法不符合预期,可绕过它,手动计算文本的实际宽高后直接设置Button尺寸:
# 创建临时文本对象获取真实尺寸 temp_text = Text( text=self.textinput, size=Text.size, font=Text.default_font, resolution=Text.default_resolution ) # 给文本添加少量内边距后设置按钮尺寸 self.button.size = (temp_text.width + 8, temp_text.height + 4)
内容的提问来源于stack exchange,提问作者Tristan Hanks
相关产品推荐
相关产品推荐

