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

1 回复

更多关于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 开发需求,特别是跨平台部署的场景。

回到顶部