Go에서 GUI를 사용하고 싶습니다!
소개
제목대로입니다.
그러나 곳곳에서 말한대로 GUI는 Go의 서투른 부분이라고합니다.
이 기사에서는 andlabs/ui을 사용하여 간단한 GUI를 만들고 싶습니다.
(또한 상기 프로그램의 Wiki의 일본어 번역에 가까운 것이 되어 버립니다만 용서해 주세요)
입문
(GOPATH 및 go get에 대해서는 생략합니다)
이 예에서는 사용자가 이름을 입력하고 버튼을 누르면 표시하는 프로그램을 작성합니다.
먼저 아래 소스 코드를 실행합시다. 미세한 부분은 나중에 설명합니다.
main.gopackage main
import (
"github.com/andlabs/ui"
)
func main() {
err := ui.Main(func() {
name := ui.NewEntry()
button := ui.NewButton("Greet")
greeting := ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
window := ui.NewWindow("Hello", 200, 100, false)
window.SetChild(box)
button.OnClicked(func(*ui.Button) {
greeting.SetText("Hello, " + name.Text() + "!")
})
window.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
window.Show()
})
if err != nil {
panic(err)
}
}
해설
Package UI 실행
var window ui.Window
먼저 ui.Window
형식의 전역 변수를 선언합니다.
Window는 다른 Control (TextField, Button 등)을 보관 유지합니다. Control을 표시하려면 Window에 추가되어 있어야 합니다. (그러나 Window는 Control이 아닙니다)
ui.Main(func() {...})
ui.Main()
는 UI의 메인 루프입니다. 이 중 Control, Window의 Show, Quit 등을 관리합니다.
Control.On<Action>(func(*ui.Control) {...})
이것은 Control의 이벤트 핸들러를 지정합니다.
Control에는 각각에 대응하는 이벤트 핸들러가 존재합니다.
UI 구축
name := ui.NewEntry()
button := ui.NewButton("Greet")
greeting := ui.NewLabel("")
이것들은 텍스트 필드, 버튼, 라벨을 만듭니다.
stack := ui.NewVerticalStack(
ui.NewLabel("Enter your name:"),
name,
button,
greeting)
Package UI의 Control은 레이아웃 컨테이너를 사용하여 배치됩니다. 이것은 GTK+와 Qt와 같습니다.
수평과 수직으로 스택하는 것을 기본으로 하고, 이들은 폭이나 높이에 따라 바뀝니다.
이번에는 수직으로 배치하는 것을 사용합니다. 또한 label에 관해서는 아무것도 변경하지 않으므로 직접 정의합니다.
window = ui.NewWindow("Hello", 200, 100, false)
window.SetChild(stack)
이제 창을 만들 준비가 되었습니다.ui.NewWindow()
는 타이틀, 폭, 높이, 메뉴 바를 가지는지를 파라미터에 지정합니다.
Window는 Control을 하나만 가질 수 있지만 스택은 Control이므로 스택을 Window로 지정하기만 하면 됩니다.
이벤트
button.OnClicked(func() {
greeting.SetText("Hello, " + name.Text() + "!")
})
이것은 버튼을 클릭했을 때의 이벤트 핸들러를 지정합니다.
이벤트 핸들러는 ui.Do()
가 실행된 후에 실행됩니다.
이벤트 핸들러는 안전하게 UI를 조작할 수 있으며 이벤트 핸들러가 실행되는 동안 다른 골 루틴에서 실행되지 않습니다.
이벤트 핸들러는 간단해야 합니다.
window.OnClosing(func() bool {
ui.Stop()
return true
})
사용자가 윈도우를 닫을 때 정상적으로 종료하려면 w.OnClosing()
를 사용하십시오.
이 경우 ui.Stop()
를 호출하여 UI 메인 루프를 종료하고 Window를 닫기 위해 true를 반환합니다.
마무리
window.Show()
이것은 윈도우를 표시하기 만하면됩니다.
빌드하고 실행해 봅시다 (Window라면 go build -ldflags -H=windowsgui main.go
)
다음과 같이 표시됩니다.
결론 실수 등이 있으면 트위터 인가 코멘트에 부탁합니다.
적용 가능한 샘플을 만들었습니다 -> 여기
Reference
이 문제에 관하여(Go에서 GUI를 사용하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/syuchan1005/items/065b5c7a149f6f9b162c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(GOPATH 및 go get에 대해서는 생략합니다)
이 예에서는 사용자가 이름을 입력하고 버튼을 누르면 표시하는 프로그램을 작성합니다.
먼저 아래 소스 코드를 실행합시다. 미세한 부분은 나중에 설명합니다.
main.go
package main
import (
"github.com/andlabs/ui"
)
func main() {
err := ui.Main(func() {
name := ui.NewEntry()
button := ui.NewButton("Greet")
greeting := ui.NewLabel("")
box := ui.NewVerticalBox()
box.Append(ui.NewLabel("Enter your name:"), false)
box.Append(name, false)
box.Append(button, false)
box.Append(greeting, false)
window := ui.NewWindow("Hello", 200, 100, false)
window.SetChild(box)
button.OnClicked(func(*ui.Button) {
greeting.SetText("Hello, " + name.Text() + "!")
})
window.OnClosing(func(*ui.Window) bool {
ui.Quit()
return true
})
window.Show()
})
if err != nil {
panic(err)
}
}
해설
Package UI 실행
var window ui.Window
먼저
ui.Window
형식의 전역 변수를 선언합니다.Window는 다른 Control (TextField, Button 등)을 보관 유지합니다. Control을 표시하려면 Window에 추가되어 있어야 합니다. (그러나 Window는 Control이 아닙니다)
ui.Main(func() {...})
ui.Main()
는 UI의 메인 루프입니다. 이 중 Control, Window의 Show, Quit 등을 관리합니다.Control.On<Action>(func(*ui.Control) {...})
이것은 Control의 이벤트 핸들러를 지정합니다.
Control에는 각각에 대응하는 이벤트 핸들러가 존재합니다.
UI 구축
name := ui.NewEntry()
button := ui.NewButton("Greet")
greeting := ui.NewLabel("")
이것들은 텍스트 필드, 버튼, 라벨을 만듭니다.
stack := ui.NewVerticalStack(
ui.NewLabel("Enter your name:"),
name,
button,
greeting)
Package UI의 Control은 레이아웃 컨테이너를 사용하여 배치됩니다. 이것은 GTK+와 Qt와 같습니다.
수평과 수직으로 스택하는 것을 기본으로 하고, 이들은 폭이나 높이에 따라 바뀝니다.
이번에는 수직으로 배치하는 것을 사용합니다. 또한 label에 관해서는 아무것도 변경하지 않으므로 직접 정의합니다.
window = ui.NewWindow("Hello", 200, 100, false)
window.SetChild(stack)
이제 창을 만들 준비가 되었습니다.
ui.NewWindow()
는 타이틀, 폭, 높이, 메뉴 바를 가지는지를 파라미터에 지정합니다.Window는 Control을 하나만 가질 수 있지만 스택은 Control이므로 스택을 Window로 지정하기만 하면 됩니다.
이벤트
button.OnClicked(func() {
greeting.SetText("Hello, " + name.Text() + "!")
})
이것은 버튼을 클릭했을 때의 이벤트 핸들러를 지정합니다.
이벤트 핸들러는
ui.Do()
가 실행된 후에 실행됩니다.이벤트 핸들러는 안전하게 UI를 조작할 수 있으며 이벤트 핸들러가 실행되는 동안 다른 골 루틴에서 실행되지 않습니다.
이벤트 핸들러는 간단해야 합니다.
window.OnClosing(func() bool {
ui.Stop()
return true
})
사용자가 윈도우를 닫을 때 정상적으로 종료하려면
w.OnClosing()
를 사용하십시오.이 경우
ui.Stop()
를 호출하여 UI 메인 루프를 종료하고 Window를 닫기 위해 true를 반환합니다.마무리
window.Show()
이것은 윈도우를 표시하기 만하면됩니다.
빌드하고 실행해 봅시다 (Window라면
go build -ldflags -H=windowsgui main.go
)다음과 같이 표시됩니다.
결론 실수 등이 있으면 트위터 인가 코멘트에 부탁합니다.
적용 가능한 샘플을 만들었습니다 -> 여기
Reference
이 문제에 관하여(Go에서 GUI를 사용하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/syuchan1005/items/065b5c7a149f6f9b162c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)