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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:39:00