hakeの日記

Windows環境でプログラミングの勉強をしています。

Go言語 - WALKでGUI - FileDialog

FileDialogの使用例。
ボタンクリックでFileDialogを作成し表示させています。
walk.FileDialog構造体を作成して、ShowOpenメソッドで表示させます。ダイアログがキャンセルで閉じられた場合には戻り値のokがfalseになり、trueの場合はFilePathフィールドからファイルパスを取得します。
特定の拡張子のファイルのみ表示させる場合には、Filterフィールドに設定します。例ではexeファイルのみと全ファイルを選択できる様にしています。


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 {150, 200},
		Size   : Size {300, 400},
		Layout: VBox {},
		Children: []Widget {
			TextEdit {
				AssignTo: &mw.edit,
			},
			PushButton {
				Text: "Open Dialog",
				OnClicked: mw.pbClicked,
			},
		},
	}

	if _, err := MW.Run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}

}

func (mw *MyMainWindow) pbClicked() {

	dlg := new(walk.FileDialog)
	dlg.FilePath = mw.path
	dlg.Title    = "Select File"
	dlg.Filter   = "Exe files (*.exe)|*.exe|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("Select : %s\r\n", mw.path)
	mw.edit.AppendText(s)
}