为何PanelContainer的StyleBox无法被正确覆盖?
问题分析与解决
你的代码中调用get_theme_stylebox时参数错误,导致你误以为StyleBox覆盖操作未生效。
问题原因
get_theme_stylebox的第二个参数是主题类型(theme_type),默认值为控件自身的类型(对于PanelContainer来说就是"PanelContainer")。但你传入了"normal",这会让引擎去查找名为"normal"的主题类型下的"normal"样式,而非PanelContainer控件自身的主题样式。因此即使你成功覆盖了PanelContainer的"normal"样式,用错误的主题类型参数去获取,得到的依然是主题默认的StyleBox实例。
修复后的代码
var panel = PanelContainer.new() # 去掉第二个参数,使用默认的控件主题类型 print(panel.has_theme_stylebox_override("normal"), panel.get_theme_stylebox("normal")) var stylebox = StyleBoxFlat.new() stylebox.bg_color = Color.from_string("#000000a0", Color.BLACK) stylebox.corner_radius_bottom_left = 10 panel.add_theme_stylebox_override("normal", stylebox) # 同样去掉第二个参数 print(panel.has_theme_stylebox_override("normal"), panel.get_theme_stylebox("normal"))
验证说明
修复后,第二次打印的StyleBox实例ID会和第一次不同,证明覆盖已经生效。你也可以通过直接访问panel.get_theme_stylebox("normal")的属性(比如bg_color)来验证,会发现它已经变成你设置的#000000a0。
内容的提问来源于stack exchange,提问作者mic
相关产品推荐
相关产品推荐

