wxGo   メニュー

ホーム   Goチュートリアル

メニュー


この章では、アプリケーションのメニュー、ステータスバー、ツールバーを説明します。

クィットメニュー

quitmenu.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Quit Menu")
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	fileMenu.  Append(wx.ID_EXIT)
	/*
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		frame.Close()
	}, wx.ID_EXIT)
	*/
	menuBar	.  Append(fileMenu, "&File")
	frame	.  SetMenuBar(menuBar)
	
	frame	.  Show()
	app	.  MainLoop()
}
    


実行方法

ターミナルで、quitmenu.go を保存したディレクトリに移動して、次のコードを実行してください。


go run quitmenu.go
    


実行結果

実行結果が表示されるまで、少し時間がかかります。


quitmenuitem メニューから、Quit Wxgo メニューアイテムを選択すると、アプリケーションが終了します。キーボードで、⌘Q(command + Q)を押しても、アプリケーションを終了できます。


quitmenu2.go


package main

import "github.com/dontpanic92/wxGo/wx"

func NewMyFrame(title string) wx.Frame {

	frame	:= wx.NewFrame(wx.NullWindow, -1, title)			
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	fileMenu.  Append(wx.ID_EXIT)
	/*
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		frame.Close()
	}, wx.ID_EXIT)
	*/
	menuBar	.  Append(fileMenu, "&File")
	frame	.  SetMenuBar(menuBar)
	
	return	frame
}


func main() {
	app	:= wx.NewApp()
	frame	:= NewMyFrame("Quit Menu")
	frame	.  Show()
	app	.  MainLoop()
}
	


quitmenu3.go


import "github.com/dontpanic92/wxGo/wx"

type MyFrame struct {
			wx.Frame
	menuBar		wx.MenuBar
}

func NewMyFrame(title string) *MyFrame {
	self		:= &MyFrame{}
	self.Frame	 = wx.NewFrame(wx.NullWindow, -1, title)
	self.menuBar	 = wx.NewMenuBar()
	fileMenu	:= wx.NewMenu()
	fileMenu	.  Append(wx.ID_EXIT)
	/*
	wx.Bind(self, wx.EVT_MENU, func(e wx.Event) {
		self.Close()
	}, wx.ID_EXIT)
	*/
	self.menuBar	.  Append(fileMenu, "&File")
	self		.  SetMenuBar(self.menuBar)
	
	return		self
}


func main() {
	app	:= wx.NewApp()
	frame	:= NewMyFrame("Quit Menu")
	frame	.  Show()
	app	.  MainLoop()
}
	


サブメニュー

submenu.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Sub Menu")
	hBox	:= wx.NewBoxSizer(wx.HORIZONTAL)
	vBox	:= wx.NewBoxSizer(wx.VERTICAL)
	
	label	:= wx.NewStaticText(frame, -1, "未選択")
	hBox	.  Add(label, 1, wx.ALIGN_CENTER)
	vBox	.  Add(hBox,  1, wx.LEFT, 10)
	frame	.  SetSizer(vBox)
	
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	subMenu	:= wx.NewMenu()
	
	fileMenu.  Append(wx.ID_NEW)
	fileMenu.  Append(wx.ID_OPEN)
	fileMenu.  Append(wx.ID_SAVE)
	fileMenu.  AppendSeparator()
	fileMenu.  AppendSubMenu(subMenu, "Import")
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_EXIT)
	subMenu	.  Append(101, "Import newsfeed list...")
	subMenu	.  Append(102, "Import bookmarks...")
	subMenu	.  Append(103, "Import mail...")
	
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		if e.GetId() == wx.ID_EXIT {
			frame.Close()
		} else {
			label.SetLabel(menuBar.GetLabel(e.GetId()))
		}
	}, menuBar.GetId())
	
	menuBar	.  Append(fileMenu, "&File")
	frame	.  SetMenuBar(menuBar)
	
	frame	.  Show()
	app	.  MainLoop()
}
    


実行方法

ターミナルで、submenu.go を保存したディレクトリに移動して、次のコードで実行してください。


go run submenu.go
	


実行結果

実行結果が表示されるまで、少し時間がかかります。


定義済みメニュー

predefinedmenu.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Predefined Menu")
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	editMenu:= wx.NewMenu()
	helpMenu:= wx.NewMenu()
	
	fileMenu.  Append(wx.ID_ABOUT)
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_NEW)
	fileMenu.  Append(wx.ID_OPEN)
	fileMenu.  Append(wx.ID_SAVE)
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_SAVEAS)
	fileMenu.  Append(wx.ID_CLOSE) 
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_EXIT)
	
	editMenu.  Append(wx.ID_UNDO)
	editMenu.  Append(wx.ID_REDO)
	editMenu.  AppendSeparator()
	editMenu.  Append(wx.ID_COPY)
	editMenu.  Append(wx.ID_CUT)
	editMenu.  Append(wx.ID_PASTE)
	editMenu.  Append(wx.ID_DELETE)
	
	helpMenu.  Append(wx.ID_HELP)
	
	menuBar	.  Append(fileMenu, "&File")
	menuBar	.  Append(editMenu, "&Edit")
	menuBar	.  Append(helpMenu, "&Help")
	frame	.  SetMenuBar(menuBar)
	
	frame	.  Show()
	app	.  MainLoop()
}
	


実行方法

ターミナルで、predefinedmenu.go を保存したディレクトリに移動して、次のコードで実行してください。


go run predefinedmenu.go
	


実行結果

実行結果が表示されるまで、少し時間がかかります。





チェックメニュー

checkmenu.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Sub Menu")
	hBox	:= wx.NewBoxSizer(wx.HORIZONTAL)
	vBox	:= wx.NewBoxSizer(wx.VERTICAL)
	
	label	:= wx.NewStaticText(frame, -1, "未選択")
	hBox	.  Add(label, 1, wx.ALIGN_CENTER)
	vBox	.  Add(hBox, 1, wx.LEFT, 10)
	frame	.  SetSizer(vBox)
	
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	
	fileMenu.  Append(wx.ID_NEW)
	fileMenu.  Append(wx.ID_OPEN)
	fileMenu.  Append(wx.ID_SAVE)
	fileMenu.  AppendCheckItem(100, "チェックメニュー")
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_EXIT)
		
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		if e.GetId() == wx.ID_EXIT {
			frame.Close()
		} else if e.GetId() == 100 {
			if menuBar.IsChecked(100) {
				label.SetLabel("チェックされました")
			} else {
				label.SetLabel("未選択")
			}
		} else {
			label.SetLabel(menuBar.GetLabel(e.GetId()))
		}
	}, menuBar.GetId())
	
	menuBar	.  Append(fileMenu, "&File")
	frame	.  SetMenuBar(menuBar)
	
	frame	.  Show()
	app	.  MainLoop()
}
	


実行方法

ターミナルで、checkmenu.go を保存したディレクトリに移動して、次のコードで実行してください。


go run checkmenu.go
	


実行結果

実行結果が表示されるまで、少し時間がかかります。


ポップアップメニュー

popupmenu.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Popup Menu")
		
	menu	:= wx.NewMenu()
	menu	.  Append(101, "Minimize")
	menu	.  Append(wx.ID_EXIT)
	
	wx.Bind(frame, wx.EVT_RIGHT_DOWN, func(e wx.Event) {
		frame.PopupMenu(menu)
	}, frame.GetId())
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		frame.Iconize()
	}, 101)
	wx.Bind(frame, wx.EVT_MENU, func(e wx.Event) {
		frame.Close()
	}, wx.ID_EXIT)
	
	frame	.  Show()
	app	.  MainLoop()
}
	


実行方法

ターミナルで、popupmenu.go を保存したディレクトリに移動して、次のコードで実行してください。


go run popupmenu.go
	


実行結果


ステータスバー

statusbar.go


package main

import "github.com/dontpanic92/wxGo/wx"

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Status Bar")
	
	menuBar	:= wx.NewMenuBar()
	fileMenu:= wx.NewMenu()
	fileMenu.  Append(wx.ID_NEW)
	fileMenu.  Append(wx.ID_OPEN)
	fileMenu.  Append(wx.ID_SAVE)
	fileMenu.  AppendSeparator()
	fileMenu.  Append(wx.ID_EXIT)
	menuBar	.  Append(fileMenu, "&File")
	frame	.  SetMenuBar(menuBar)
	
	ok		:= wx.NewButton(frame, 101, "OK")
	cancel	:= wx.NewButton(frame, 102, "Cancel")
	hBox	:= wx.NewBoxSizer(wx.HORIZONTAL)
	hBox	.  Add(ok,     1, wx.TOP|wx.RIGHT|wx.LEFT, 5)
	hBox	.  Add(cancel, 1, wx.TOP|wx.RIGHT,         5)
	frame	.  SetSizer(hBox)
	
	status	:= wx.NewStatusBar(frame, -1)
	status	.  SetStatusText("Hello wxGo")
	frame	.  SetStatusBar(status)
	/*
	frame	.  CreateStatusBar()
	frame	.  SetStatusText("Hello wxGo")
	*/
	wx.Bind(frame, wx.EVT_BUTTON, func(e wx.Event) {
		status.SetStatusText("You clicked OK.")
	}, 101)
	
		
	wx.Bind(frame, wx.EVT_BUTTON, func(e wx.Event) {
		status.SetStatusText("You clicked Cancel.")
	}, 102)
	
	frame	.  Show()
	app	.  MainLoop()
}
	


実行結果


ツールバー

toolbar.go


package main

import (
	"github.com/dontpanic92/wxGo/wx"
	"strconv"
)

func main() {
	app	:= wx.NewApp()
	frame	:= wx.NewFrame(wx.NullWindow, -1, "Tool Bar")
	label	:= wx.NewStaticText(frame, -1, "5")
	label	.  SetFont(label.GetFont().Larger())
	
	hBox	:= wx.NewBoxSizer(wx.HORIZONTAL)
	vBox	:= wx.NewBoxSizer(wx.VERTICAL)
	hBox	.  Add(label, 1, wx.ALIGN_CENTER)
	vBox	.  Add(hBox,  1, wx.ALIGN_CENTER)
	frame	.  SetSizer(vBox)
	
	toolBar := wx.NewToolBar(frame, -1)
	frame	.  SetToolBar(toolBar)
	toolBar	.  AddTool(wx.ID_UNDO, "Undo", wx.ArtProviderGetBitmap(wx.ART_UNDO))
	toolBar	.  AddTool(wx.ID_REDO, "Redo", wx.ArtProviderGetBitmap(wx.ART_REDO))
	toolBar	.  AddSeparator()
	toolBar	.  AddTool(wx.ID_EXIT, "Quit", wx.ArtProviderGetBitmap(wx.ART_QUIT))
	toolBar	.  Realize()
	
	/* Another ToolBar definition
	toolBar	:= frame.CreateToolBar(wx.TB_HORIZONTAL, -1)
	toolBar	.AddTool(wx.ID_UNDO, "Back", wx.ArtProviderGetBitmap(wx.ART_UNDO), wx.NullBitmap, wx.ITEM_NORMAL, "Back", "Go Back")
	*/
	
	toolBar	.  EnableTool(wx.ID_REDO, false)
	
	wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
		n, _ := strconv.Atoi(label.GetLabel())
		n--
		switch n {
		case 0:
			toolBar.EnableTool(wx.ID_UNDO, false)
		case 4:
			toolBar.EnableTool(wx.ID_REDO, true)
		}
		label.SetLabel(strconv.Itoa(n))
	}, wx.ID_UNDO)
	
	wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
		n, _ := strconv.Atoi(label.GetLabel())
		n++
		switch n {
		case 1:
			toolBar.EnableTool(wx.ID_UNDO, true)
		case 5:
			toolBar.EnableTool(wx.ID_REDO, false)
		}
		label.SetLabel(strconv.Itoa(n))
	}, wx.ID_REDO)
	
	wx.Bind(frame, wx.EVT_TOOL, func(e wx.Event) {
			frame.Close()
	}, wx.ID_EXIT)
		
	frame	.  Show()
	app	.  MainLoop()
}
	


実行結果


459047 visits
Posted: Jul. 15, 2019
Update: Jul. 17, 2019

ホーム   Goチュートリアル   目次