如何在GDScript中通过Stylebox为Button按钮设置边框
实现方案
你的代码核心逻辑是对的,但是有几个遗漏点需要调整:
- 首先需要确保你拿到的样式是
StyleBoxFlat类型,如果当前主题的默认按钮样式不是该类型,as转换会返回空,后续赋值会报错,更稳妥的方式是直接新建StyleBoxFlat实例而非复制现有样式 - 你只设置了左侧边框宽度,且没有设置边框颜色,默认边框为透明,视觉上看不到效果
- 按钮包含
normal/hover/pressed/disabled四种常用状态,仅设置normal状态的话,其他交互状态下边框会消失
修正后可用代码
extends Button func init(num,_x,_y): text = str(num) connect("pressed", self, "ButtonPressed") # 直接新建StyleBoxFlat实例,避免原有样式类型不匹配的问题 var style_normal = StyleBoxFlat.new() # 设置背景色,可根据需求调整 style_normal.bg_color = Color(0.2, 0.2, 0.2) # 四个方向边框宽度都设为1,也可以单独给某一侧设置 style_normal.border_width_left = 1 style_normal.border_width_right = 1 style_normal.border_width_top = 1 style_normal.border_width_bottom = 1 # 设置边框颜色,这里设为白色,按需调整 style_normal.border_color = Color(1,1,1) # 可以加个圆角,不需要的话删掉就行 style_normal.corner_radius_all = 2 # 给normal状态设置样式覆盖 add_stylebox_override("normal", style_normal) # 按需给其他状态也设置对应边框,这里举hover状态的例子,逻辑同上 var style_hover = style_normal.duplicate() style_hover.bg_color = Color(0.3, 0.3, 0.3) # hover时背景变亮一点 add_stylebox_override("hover", style_hover) # pressed状态同理 var style_pressed = style_normal.duplicate() style_pressed.bg_color = Color(0.15, 0.15, 0.15) # 按下时背景变暗 add_stylebox_override("pressed", style_pressed)
如果你还是想用原有复制默认样式的逻辑,加个空判断即可:
var new_stylebox_normal = get_stylebox("normal").duplicate() var stylebox_flat = new_stylebox_normal as StyleBoxFlat # 加非空判断,避免转换失败报错 if stylebox_flat: stylebox_flat.border_width_left = 1 stylebox_flat.border_width_right = 1 stylebox_flat.border_width_top = 1 stylebox_flat.border_width_bottom = 1 # 一定要设置边框颜色 stylebox_flat.border_color = Color(1,1,1) add_stylebox_override("normal",stylebox_flat)
内容的提问来源于stack exchange,提问作者user2617804
相关产品推荐
相关产品推荐

