概述
前面文章总结了Godot4.2中的按钮类控件。当然那只是开胃菜,基于按钮控件相关的基础知识总结出一个按钮生成函数库,并在函数库基础上创建工具栏(自定义控件)才是我的最终目标。
函数库代码
函数库代码会不断改进更新,本文内容也会不断扩充。
# ========================================
# 名称:buttonDB
# 类型:静态函数库
# 描述:专用于【生成按钮】的静态函数库
# 作者:巽星石
# Godot版本:v4.2.1.stable.official [b09f793f5]
# 创建时间:2024年2月26日18:45:28
# 最后修改时间:2024年2月27日21:15:50
# ========================================
class_name buttonDB
# ================== 【普通按钮】 ==================
# 生成并返回普通纯文本按钮
static func button(text:String = "Button") -> Button:
var btn = Button.new()
btn.text = text
return btn
# ================== 【带图标按钮】 ==================
# 生成并返回带有图标的按钮 - 图标在左,文本在右
static func icon_left_button(icon:Texture2D,text:String = "Button") -> Button:
var btn = button(text)
btn.icon = icon
return btn
# 生成并返回带有图标的按钮 - 图标在右,文本在左
static func icon_right_button(icon:Texture2D,text:String = "Button") -> Button:
var btn = icon_left_button(icon,text)
btn.icon_alignment = HORIZONTAL_ALIGNMENT_RIGHT
return btn
# 生成并返回带有图标的按钮 - 图标在上,文本在下
static func icon_top_button(icon:Texture2D,text:String = "Button") -> Button:
var btn = icon_left_button(icon,text)
btn.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
btn.vertical_icon_alignment = VERTICAL_ALIGNMENT_TOP
return btn
# 生成并返回带有图标的按钮 - 图标在下,文本在上
static func icon_bottom_button(icon:Texture2D,text:String = "Button") -> Button:
var btn = icon_left_button(icon,text)
btn.icon_alignment = HORIZONTAL_ALIGNMENT_CENTER
btn.vertical_icon_alignment = VERTICAL_ALIGNMENT_BOTTOM
return btn
# ================== 【纯图标无文本按钮】 ==================
# 纯图标按钮
static func ToolButton(icon:Texture2D,tool_tip:String = "") -> Button:
var btn = icon_left_button(icon,"")
btn.tooltip_text = tool_tip
return btn
# ================== 【带图标按钮】 ==================
# 生成并返回CheckButton
static func check_button(text:String = "CheckButton",icon:Texture2D = null,checked_icon:Texture2D = null,unchecked_icon:Texture2D = null,tool_tip:String = "") -> CheckButton:
var btn = CheckButton.new()
btn.text = text
btn.icon = icon
if checked_icon:
btn.set("theme_override_icons/checked",checked_icon) # 选中图标
if unchecked_icon:
btn.set("theme_override_icons/unchecked",unchecked_icon) # 未选中图标
btn.tooltip_text = tool_tip
return btn
# ================== 【按钮组】 ==================
# 生成并返回使用相同"ButtonGroup"的按钮组
static func BtnGup(texts:PackedStringArray) -> Array[Button]:
var arr:Array[Button] = []
var gup = ButtonGroup.new()
for text in texts:
var btn = Button.new()
btn.text = text
btn.toggle_mode = true
btn.button_group = gup
arr.append(btn)
return arr