wxGo は、人気のある wxWidgets という、GUI アプリケーション・フレームワークを、Go に移植したものです。
wxWidgets は、C++ で書かれた クロスプラットフォームな GUI アプリケーション・フレームワークです。
クロスプラットフォーム(cross-platform)とは、Windows、macOS、Linux などの異なるオペレーティングシステムで、同じソースコードのプログラムを実行できる仕組みのことです。多くの場合、同じソースコードファイルを、それぞれの OS 上で、コンパイルするだけで実行できます。
フレームワーク(framework)とは、何かをするために便利なように作られた関数などを集めたものです。GUI アプリケーション・フレームワークは、GUI アプリケーションを作るためのフレームワークです。
macOS 以外の環境には、まだ開発環境の構築に成功していないので、このコーナーは、macOS 限定とさせていただきます。
まず、ターミナルに次のコードを入力して、Go の開発環境がすでにインストール されているかどうか確認してみましょう。
go version
goがインストールされている場合は次のように表示されます
go version go1.12.6 darwin/amd64
インストールされていない場合は、Go の開発環境をインストールします。Go の開発環境のインストールは非常に簡単です。
ターミナルに次のコードを入力して、エンターキーを押すと、Homebrewのインストールが始まります。macOS でプログラミングを行う場合は、Command Line Tools が必要ですが、Homebrewのインストーラーは、Cmmand Line Tools も自動的にインストールしてくれます。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Home brewのインストールコードは、変更になる場合があります。下記オフィシャルサイトに表示されているイントールコードを、コピーして使うほうが良いでしょう。
ターミナルに次のコードを入力して、エンターキーを押します。
brew install go
go version
go version go1.12.6 darwin/amd64
wxGo を使うためには、C++ の開発環境がインストールされている必要があります。
macOS の場合は、Command Line Toolsをインストールすると、C++ の開発環境もインストールされます。Command Line Toolsは、Homebrew をインストールした時に、同時にインストールされていますので、ここでは特に何もする必要はありません。
wxGo は、次のコードでインストールできます。少し時間がかかる場合があります。
go get github.com/dontpanic92/wxGo/wx
次のコードをお好きなエディタで記述して保存してください。
package main
import "github.com/dontpanic92/wxGo/wx"
func main() {
app := wx.NewApp()
frame := wx.NewFrame(wx.NullWindow, wx.ID_ANY, "Hello wxGo")
frame .Show()
app .MainLoop()
}
ターミナルで、main.go を保存したディレクトリに移動して、次のコードで実行してください。
go run main.go
実行結果が表示されるのに、少し時間がかかります。
ウィンドウを閉じるとアプリケーションは終了します。
ウィンドウのデフォルトサイズは、プラットフォームによって違うみたいです。多くの場合、横 400 ピクセル、縦 500 ピクセルぐらいになる場合が多いみたいです。上の図と同じサイズにするには、コードを次のように変更してください。
frame := wx.NewFrame(wx.NullWindow, wx.ID_ANY, "Hello wxGo")
↓
frame := wx.NewFrame(wx.NullWindow, wx.ID_ANY, "Hello wxGo", wx.DefaultPosition, wx.NewSize(400, 250))
package main
Go のソースコードはパッケージ単位で管理します。特に意図がない限りは、最初のパッケージは main にします。
import "github.com/dontpanic92/wxGo/wx"
wxGo のパッケージを読み込んでいます。これによって、wxWidgets の関数などが使えるようになります。
func main() {
多くのプログラミング言語と同様に、Go のプログラムも main 関数から始まる決まりになっています。
app := wx.NewApp()
アプリケーションを作って起動します。
frame := wx.NewFrame(wx.NullWindow, wx.ID_ANY, "Hello wxGo")
フレームを作っています。フレームとは、ウィンドウのことです。第1引数にフレームが所属するウィンドウ、第2引数にフレームの ID、第3引数にフレームに表示される文字列を指定します。
フレームじたいが、ウィンドウなので、どのウィンドウにも所属していないことをあらわす wx.NullWindow を第1引数に指定しています。第2引数に、wx.ID_ANY を指定すると一意の整数が与えられます。wx.ID_ANY の替わりに -1 と記述しても一意の整数が得られます。
frame .Show()
フレームは、作っただけでは表示されません。Show メソッドで表示されるようにします。
app .MainLoop()
アプリケーションの MainLoop メソッドを呼び出すことで、アプリケーションが継続的に起動し続けるようになります。もし MainLoop メソッドを呼び出さない場合は、アプリケーションは一瞬で終わります。