GIU 学习 教程

Published by rcdfrd on 2025-10-30

Hello World

package main

import (
	g "github.com/AllenDang/giu"
)

func loop() {
	g.SingleWindow().Layout(
		g.Label("Hello world from giu"),
	)
}

func main() {
	wnd := g.NewMasterWindow("Hello world", 400, 200, 0)
	wnd.Run(loop)
}

Layout 布局

单窗口布局时,只需要在 g.SingleWindow().Layout() 中布局

Layout 分割

SplitLayout(SplitDirection,sashPos,layout1,layout2)

Widget 部件

  • 菜单栏
g.MenuBar().Layout(
			g.Menu("File").Layout(
                g.MenuItem("Open").Shortcut("Ctrl+O(未绑定)").OnClick(func(){}),
				g.Menu("Save as ...").Layout(
					g.MenuItem("CSV file"),
				),
			),
		),
  • 标签(单行文本框) Lable g.Lable(text) 可链式到其他widget

  • 列表项文本 g.BulletText(text)

  • 多行文本框 g.Lable(str).Wrapped(true)

  • 可选文本框 g.Selectable(text)

  • 给 Lable 加 Event 事件 下一行 g.Event().OnClick(func).OnHover(func)

  • 单行 行内多个Widget g.Row(W1, W2...)

  • 输入文本框 g.InputText(&str)

  • 多行输入框 g.InputTextMultiline(&str).Size(g.Auto, g.Auto)

  • 检测输入文本框Active g.Event().OnActivate/OnDeactivate

  • 按钮 g.Button("B1").OnClick()

  • Widget选中提示 下方加入 g.Tooltip(str) 支持 .Layout 多行提示

  • Widget选中提示 提示框 g.Tooltip(str).To(W1, W2...)

  • 日期选择框 g.DatePicker("Date", &str)

  • Checkbox 勾选框 g.Checkbox()

  • 空白栏 d.Dummy(width, height)

  • Radio 单选框 g.RadioButton(text, bool)

  • 滑块 g.DragInt(text,&int,min,max) / SliderInt/VSliderInt(&int,min,max)

  • 多选框 g.Combo(text, items[item], items, &item)

  • 颜色选择框 g.ColorEdit(text, &color)

  • 箭头 g.ArrowButton(directions)

  • 弹出提示框 g.PopupModal(name).Layout() 使用 g.OpenPopup(name) 弹出

  • 右键菜单 g.ContextMenu().Layout() 只对上一行的Widget有效

  • 横向选择栏 g.TabBar().TabItems(g.TabItem(text).Layout()...)

  • 表格 g.Table().Columns(g.TableColumn(text)...).Rows(g.TableRow(Widget)...)

  • 树/树表格 g.TreeNode() / g.TreeTable()

  • 自定义Widget g.Custom(func)

ID

指定 ID W().ID(ID)

ID 不可重复,GIU默认会自动生成ID

多线程

func refresh() {
	ticker := time.NewTicker(time.Second * 1)
	for {
	    // update variables
		giu.Update()
		<-ticker.C
	}
}
func main() {
	go refresh() 
	...

字体

// 全局字体
g.Context.FontAtlas.SetDefaultFont("Arial", 24)
// 自定义字体
bigFont = g.Context.FontAtlas.AddFont("Menlo.ttc", 24)
bigFont *g.FontInfo
g.Label("Title").Font(bigFont)

Style

g.Style().SetColor(g.StyleColorText, color.RGBA{0x36, 0x74, 0xD5, 255}).Widget

对齐 Align

g.Align(g.AlignCenter).To(Widget1,...)
g.AlignManually(g.AlignCenter,g.Button("200 width").Size(200, 30),200, false)