Go言語のWalkというライブラリでダイヤログで選択する方法と、アプリのウィンドウにドラッグ&ドロップやつの実装方法を調べました。
ダイヤログで選択
下のサイトを参考にして書きました。
Go言語 - WALKでGUI - FileDialog - hakeの日記
package main
import (
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
import (
"fmt"
"os"
)
type MyMainWindow struct {
*walk.MainWindow
edit *walk.TextEdit
path string
}
func main() {
mw := &MyMainWindow{}
MW := MainWindow{
AssignTo: &mw.MainWindow,
Title: "FileDialogテスト",
MinSize: Size{320, 200},
Layout: VBox{},
Children: []Widget{
TextEdit{
AssignTo: &mw.edit,
ReadOnly: true,
},
PushButton{
Text: "Open Dialog",
OnClicked: mw.Clicked,
},
},
}
if _, err := MW.Run(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
func (mw *MyMainWindow) Clicked() {
dlg := new(walk.FileDialog)
dlg.FilePath = mw.path
dlg.Title = "Select File"
dlg.Filter = "All files (*.*)|*.*"
if ok, err := dlg.ShowOpen(mw); err != nil {
mw.edit.AppendText("Error : File Open\r\n")
return
} else if !ok {
mw.edit.AppendText("Cancel\r\n")
return
}
mw.path = dlg.FilePath
s := fmt.Sprintf("%s\r\n", mw.path)
mw.edit.AppendText(s)
}
ドラッグ&ドロップ
Walkのドキュメントにサンプルコードが上がっていました。
walk/dropfiles.go at master · lxn/walk
package main
import (
"strings"
"github.com/lxn/walk"
. "github.com/lxn/walk/declarative"
)
func main() {
var textEdit *walk.TextEdit
MainWindow{
Title: "Walk DropFiles Example",
MinSize: Size{320, 240},
Layout: VBox{},
OnDropFiles: func(files []string) {
textEdit.SetText(strings.Join(files, "\r\n"))
},
Children: []Widget{
TextEdit{
AssignTo: &textEdit,
ReadOnly: true,
Text: "Drop files here, from windows explorer...",
},
},
}.Run()
}