go语言gui的库andlabs/ui官方代码实例

今天我们记录andlabs/ui库的学习历程,我们看一下官方的例子,因为它教程比较少,只能看官方的案例,百度看介绍的时候功能也可以。准备用它写一个自动升级用的小工具,两三个窗口,以为能搞定的。

Go Get安装库:

 go get github.com/andlabs/libui
 go get github.com/andlabs/ui

官方代码实例:

// 12 august 2018

// +build OMIT

package main

import (
    "github.com/andlabs/ui"
    _ "github.com/andlabs/ui/winmanifest"
)

var mainwin *ui.Window

func makeBasicControlsPage() ui.Control {
    vbox := ui.NewVerticalBox()
    vbox.SetPadded(true)

    hbox := ui.NewHorizontalBox()
    hbox.SetPadded(true)
    vbox.Append(hbox, false)

    hbox.Append(ui.NewButton("Button"), false)
    hbox.Append(ui.NewCheckbox("Checkbox"), false)

    vbox.Append(ui.NewLabel("This is a label. Right now, labels can only span one line."), false)

    vbox.Append(ui.NewHorizontalSeparator(), false)

    group := ui.NewGroup("Entries")
    group.SetMargined(true)
    vbox.Append(group, true)

    group.SetChild(ui.NewNonWrappingMultilineEntry())

    entryForm := ui.NewForm()
    entryForm.SetPadded(true)
    group.SetChild(entryForm)

    entryForm.Append("Entry", ui.NewEntry(), false)
    entryForm.Append("Password Entry", ui.NewPasswordEntry(), false)
    entryForm.Append("Search Entry", ui.NewSearchEntry(), false)
    entryForm.Append("Multiline Entry", ui.NewMultilineEntry(), true)
    entryForm.Append("Multiline Entry No Wrap", ui.NewNonWrappingMultilineEntry(), true)

    return vbox
}

func makeNumbersPage() ui.Control {
    hbox := ui.NewHorizontalBox()
    hbox.SetPadded(true)

    group := ui.NewGroup("Numbers")
    group.SetMargined(true)
    hbox.Append(group, true)

    vbox := ui.NewVerticalBox()
    vbox.SetPadded(true)
    group.SetChild(vbox)

    spinbox := ui.NewSpinbox(0, 100)
    slider := ui.NewSlider(0, 100)
    pbar := ui.NewProgressBar()
    spinbox.OnChanged(func(*ui.Spinbox) {
        slider.SetValue(spinbox.Value())
        pbar.SetValue(spinbox.Value())
    })
    slider.OnChanged(func(*ui.Slider) {
        spinbox.SetValue(slider.Value())
        pbar.SetValue(slider.Value())
    })
    vbox.Append(spinbox, false)
    vbox.Append(slider, false)
    vbox.Append(pbar, false)

    ip := ui.NewProgressBar()
    ip.SetValue(-1)
    vbox.Append(ip, false)

    group = ui.NewGroup("Lists")
    group.SetMargined(true)
    hbox.Append(group, true)

    vbox = ui.NewVerticalBox()
    vbox.SetPadded(true)
    group.SetChild(vbox)

    cbox := ui.NewCombobox()
    cbox.Append("Combobox Item 1")
    cbox.Append("Combobox Item 2")
    cbox.Append("Combobox Item 3")
    vbox.Append(cbox, false)

    ecbox := ui.NewEditableCombobox()
    ecbox.Append("Editable Item 1")
    ecbox.Append("Editable Item 2")
    ecbox.Append("Editable Item 3")
    vbox.Append(ecbox, false)

    rb := ui.NewRadioButtons()
    rb.Append("Radio Button 1")
    rb.Append("Radio Button 2")
    rb.Append("Radio Button 3")
    vbox.Append(rb, false)

    return hbox
}

func makeDataChoosersPage() ui.Control {
    hbox := ui.NewHorizontalBox()
    hbox.SetPadded(true)

    vbox := ui.NewVerticalBox()
    vbox.SetPadded(true)
    hbox.Append(vbox, false)

    vbox.Append(ui.NewDatePicker(), false)
    vbox.Append(ui.NewTimePicker(), false)
    vbox.Append(ui.NewDateTimePicker(), false)
    vbox.Append(ui.NewFontButton(), false)
    vbox.Append(ui.NewColorButton(), false)

    hbox.Append(ui.NewVerticalSeparator(), false)

    vbox = ui.NewVerticalBox()
    vbox.SetPadded(true)
    hbox.Append(vbox, true)

    grid := ui.NewGrid()
    grid.SetPadded(true)
    vbox.Append(grid, false)

    button := ui.NewButton("Open File")
    entry := ui.NewEntry()
    entry.SetReadOnly(true)
    button.OnClicked(func(*ui.Button) {
        filename := ui.OpenFile(mainwin)
        if filename == "" {
            filename = "(cancelled)"
        }
        entry.SetText(filename)
    })
    grid.Append(button,
        0, 0, 1, 1,
        false, ui.AlignFill, false, ui.AlignFill)
    grid.Append(entry,
        1, 0, 1, 1,
        true, ui.AlignFill, false, ui.AlignFill)

    button = ui.NewButton("Save File")
    entry2 := ui.NewEntry()
    entry2.SetReadOnly(true)
    button.OnClicked(func(*ui.Button) {
        filename := ui.SaveFile(mainwin)
        if filename == "" {
            filename = "(cancelled)"
        }
        entry2.SetText(filename)
    })
    grid.Append(button,
        0, 1, 1, 1,
        false, ui.AlignFill, false, ui.AlignFill)
    grid.Append(entry2,
        1, 1, 1, 1,
        true, ui.AlignFill, false, ui.AlignFill)

    msggrid := ui.NewGrid()
    msggrid.SetPadded(true)
    grid.Append(msggrid,
        0, 2, 2, 1,
        false, ui.AlignCenter, false, ui.AlignStart)

    button = ui.NewButton("Message Box")
    button.OnClicked(func(*ui.Button) {
        ui.MsgBox(mainwin,
            "This is a normal message box.",
            "More detailed information can be shown here.")
    })
    msggrid.Append(button,
        0, 0, 1, 1,
        false, ui.AlignFill, false, ui.AlignFill)
    button = ui.NewButton("Error Box")
    button.OnClicked(func(*ui.Button) {
        ui.MsgBoxError(mainwin,
            "This message box describes an error.",
            "More detailed information can be shown here.")
    })
    msggrid.Append(button,
        1, 0, 1, 1,
        false, ui.AlignFill, false, ui.AlignFill)

    return hbox
}

//设置UI界面
func setupUI() {
    mainwin = ui.NewWindow("官方案例qqhd.me", 640, 480, true)
    mainwin.OnClosing(func(*ui.Window) bool {
        ui.Quit()
        return true
    })
    ui.OnShouldQuit(func() bool {
        mainwin.Destroy()
        return true
    })

    tab := ui.NewTab()
    mainwin.SetChild(tab)
    mainwin.SetMargined(true)

    tab.Append("Basic Controls", makeBasicControlsPage())
    tab.SetMargined(0, true)

    tab.Append("Numbers and Lists", makeNumbersPage())
    tab.SetMargined(1, true)

    tab.Append("Data Choosers", makeDataChoosersPage())
    tab.SetMargined(2, true)

    mainwin.Show()
}

func main() {
    ui.Main(setupUI)
}

运行效果图:

你可能感兴趣的:(go语言gui的库andlabs/ui官方代码实例)