Golang GUI开发工具 - 宣布推出Ebitengine工具包etk
Golang GUI开发工具 - 宣布推出Ebitengine工具包etk etk 是一个为 Ebitengine 游戏引擎设计的库,它简化了图形用户界面的创建过程。Boxcars 项目就使用了 etk 来极大地简化其 UI 开发,因为它的单一代码库可以同时面向 Web、桌面和 Android 平台。
特性:
- 简化 GUI 开发:
- 自动传播布局变更。
- 自动传播用户输入。
- 自动传播焦点。
- 设计上易于扩展:
- 提供了 Box 组件作为构建自定义组件的基础模块。
- 组件可以高效地相互嵌套。
- 工具包中包含的组件:
- Box:用于创建自定义组件的基础模块。
- Button:可点击的按钮。
- Flex:灵活的基于堆栈的布局。每个 Flex 组件可以水平或垂直排列。
- Frame:组件容器。所有子组件会同时显示。默认情况下,子组件的位置不会被重新调整。
- Grid:高度可定制的基于单元格的布局。添加到 Grid 中的每个组件可以跨越多行或多列。
- Input:文本输入组件。Input 组件本质上就是一个同时能接收用户输入的 Text 组件。
- List:将组件列表作为可选项。
- Text:文本显示组件。
- Window:组件分页机制。添加到 Window 中的组件一次只显示一个。
更多关于Golang GUI开发工具 - 宣布推出Ebitengine工具包etk的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang GUI开发工具 - 宣布推出Ebitengine工具包etk的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
etk 是一个为 Ebitengine 设计的 GUI 工具包,它确实能显著简化界面开发。以下是一个简单的示例,展示如何使用 etk 创建一个包含按钮和文本输入框的基本界面:
package main
import (
"fmt"
"github.com/hajimehoshi/ebiten/v2"
"code.rocketnine.space/tslocum/etk"
)
type Game struct {
ui *etk.Root
}
func (g *Game) Update() error {
return g.ui.Update()
}
func (g *Game) Draw(screen *ebiten.Image) {
g.ui.Draw(screen)
}
func (g *Game) Layout(outsideWidth, outsideHeight int) (int, int) {
return outsideWidth, outsideHeight
}
func main() {
// 创建根容器
root := etk.NewRoot()
// 创建垂直排列的Flex布局
flex := etk.NewFlex()
flex.SetVertical(true)
// 创建文本输入框
input := etk.NewInput()
input.SetText("请输入内容")
flex.AddChild(input)
// 创建按钮
button := etk.NewButton("点击我")
button.SetOnClick(func() error {
fmt.Printf("输入的内容: %s\n", input.Text())
return nil
})
flex.AddChild(button)
// 将Flex添加到根容器
root.AddChild(flex)
// 创建游戏实例
game := &Game{ui: root}
// 配置Ebitengine
ebiten.SetWindowSize(400, 300)
ebiten.SetWindowTitle("etk示例")
// 运行游戏
if err := ebiten.RunGame(game); err != nil {
panic(err)
}
}
这个示例展示了 etk 的核心特性:自动布局传播和事件处理。Flex 组件会自动管理子组件的排列,按钮点击事件会自动传播到回调函数。etk 的组件系统确实如文档所述,能够高效嵌套,这个示例中 Root → Flex → (Input + Button) 的层次结构运行良好。
对于需要更复杂布局的情况,可以使用 Grid 组件:
// 创建3x3网格布局
grid := etk.NewGrid()
grid.SetColumnSizes(100, 100, 100)
grid.SetRowSizes(50, 50, 50)
// 在网格中添加组件
for i := 0; i < 9; i++ {
btn := etk.NewButton(fmt.Sprintf("按钮%d", i+1))
grid.AddChildAt(btn, i%3, i/3, 1, 1)
}
etk 的自动焦点管理在实际使用中表现稳定,用户可以通过 Tab 键在 Input 组件之间切换焦点。List 组件支持大量项目的滚动显示,Window 组件提供了标签页功能,这些特性在 Boxcars 项目中已经得到了验证。
需要注意的是,etk 目前仍在积极开发中,API 可能会有变化。但现有的组件系统已经足够稳定,能够满足大多数 GUI 开发需求,特别是跨平台部署的场景。

