Existem muitas bibliotecas gui para go, mas muitas delas não possuem documentação oficial, o que torna difícil o aprendizado. Após várias considerações, escolhi a biblioteca walk para aprendizagem, que só pode ser executada na plataforma Windows. O estilo de sintaxe da biblioteca walk é como o JavaScript, que pode construir programas gui rapidamente, e a interface também é bonita. Ao mesmo tempo, a biblioteca walk usa reflexão para obter capacidade de resposta, que pode ligar os valores e variáveis na interface em duas direções, o que é muito conveniente. Claro, se você quiser torná-lo muito bonito, você ainda usa o Qt.
Aprendi com os exemplos dados no github . Organize de acordo com as idéias de aprendizagem da biblioteca GUI em geral.
A criação de uma janela básica pode encontrar exemplos no GitHub
janela
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
"strings"
)
func main() {
var inTE, outTE *walk.TextEdit
MainWindow{
Title: "SCREAMO",
MinSize: Size{
600, 400},
Layout: VBox{
},
Children: []Widget{
HSplitter{
Children: []Widget{
TextEdit{
AssignTo: &inTE},
TextEdit{
AssignTo: &outTE, ReadOnly: true},
},
},
PushButton{
Text: "SCREAM",
OnClicked: func() {
outTE.SetText(strings.ToUpper(inTE.Text()))
},
},
},
}.Run()
O programa acima cria uma janela.Claro que é necessário.Este rsrc.syso
arquivo é usado para solicitar algumas permissões e não precisa ser alterado. Podemos ver que a estrutura de toda a janela é muito clara usando a estrutura. O primeiro é o título da janela, o segundo é o tamanho mínimo da janela e o segundo é o layout, que mostra que os subcomponentes estão dispostos verticalmente, é claro, também pode haver sub-layouts dentro do sub -componentes. Após definir os componentes na janela, um divisor horizontal e duas caixas de texto, eles serão organizados horizontalmente. Imediatamente abaixo, há um botão e define o texto do botão e o evento de clique. Tudo isso é muito simples, claro e intuitivo.
layout
O layout do passeio é muito simples, mas pode resolver a maioria das necessidades.
Layout vertical
O layout vertical serve para organizar os componentes verticalmente. A margem pode ser especificada e haverá margem por padrão.
package main
import (
. "github.com/lxn/walk/declarative"
)
func main() {
var mw = MainWindow{
Title:
"SCREAMO",
// 指定窗口的大小
MinSize: Size{
Width: 600, Height: 400},
Layout: VBox{
},
Children: []Widget{
PushButton{
Text: "btn1"},
PushButton{
Text: "btn2"},
PushButton{
Text: "btn3"},
PushButton{
Text: "btn4"},
PushButton{
Text: "btn5"},
},
}
mw.Persistent = true
mw.Run()
}
Arranjo horizontal
O mesmo
Layout de grade
O layout da grade pode especificar o número de linhas e colunas e também pode especificar linhas ou colunas.
package main
import (
. "github.com/lxn/walk/declarative"
)
func main() {
var mw = MainWindow{
Title:
"SCREAMO",
// 指定窗口的大小
MinSize: Size{
},
Layout: Grid{
Rows: 3,
},
Children: []Widget{
PushButton{
Text: "btn1"},
PushButton{
Text: "btn2"},
PushButton{
Text: "btn3"},
PushButton{
Text: "btn4"},
PushButton{
Text: "btn5"},
},
}
mw.Persistent = true
mw.Run()
}
Especifique o número de colunas ocupadas pelo componente e use preenchimento em branco
package main
import (
. "github.com/lxn/walk/declarative"
)
func main() {
var mw = MainWindow{
Title:
"SCREAMO",
// 指定窗口的大小
MinSize: Size{
},
Layout: Grid{
Columns: 5,
},
Children: []Widget{
PushButton{
Text: "btn1",ColumnSpan: 2},
PushButton{
Text: "btn2"},
PushButton{
Text: "btn3"},
HSpacer{
ColumnSpan: 3},
PushButton{
Text: "btn4"},
PushButton{
Text: "btn5"},
},
}
mw.Persistent = true
mw.Run()
}
Use divisor horizontal ou vertical
package main
import (
. "github.com/lxn/walk/declarative"
)
func main() {
var mw = MainWindow{
Title:
"SCREAMO",
// 指定窗口的大小
MinSize: Size{
},
Layout: VBox{
MarginsZero: true,
},
Children: []Widget{
HSplitter{
Children: []Widget{
PushButton{
Text: "btn1"},
PushButton{
Text: "btn2"},
PushButton{
Text: "btn3"},
},
},
VSeparator{
},
PushButton{
Text: "btn4"},
PushButton{
Text: "btn5"},
},
}
mw.Persistent = true
mw.Run()
}