Go-GTK   コントロール

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


コントロール


ユーザーが操作できる ウィジェットのことをコントロールと言います。そしてコントロールは、ユーザーの操作を受けて、イベントというものを発します。このイベントと、何かの処理を接続することによって、アプリケーションは動作するようになります。

GTK では、GUI パーツのことをウィジェット(widget)と呼んでいます。


ボタン

button.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Button")
	window	.  SetPosition(gtk.WIN_POS_CENTER)	
	window	.  Connect("destroy", gtk.MainQuit)
	
	button	:= gtk.NewButtonWithLabel("Exit")
	button	.  SetSizeRequest(80, 28)
	button	.  Connect("clicked", gtk.MainQuit)
	
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(button)
	window	.  Add(align)
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run button.go
    


実行結果


チェックボタン

checkbutton.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Check Button")
	window	.  SetPosition(gtk.WIN_POS_CENTER)	
	window	.  Connect("destroy", gtk.MainQuit)
	
	check	:= gtk.NewCheckButtonWithLabel("Show Title")
	check	.  SetActive(true)
	check	.  Connect("clicked", func() {
		if check.GetActive() {
			window.SetTitle("Check Button")
		} else {
			window.SetTitle("")
		}
	})
	
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(check)
	window	.  Add(align)
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run checkbutton.go
    


実行結果



ラジオボタン

radiobutton.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Radio Button")
	window	.  SetPosition(gtk.WIN_POS_CENTER)	
	window	.  Connect("destroy", gtk.MainQuit)
	
	label	:= gtk.NewLabel("")
	label	.  SetMarkup("<span foreground='red' size='19000'>Hello Go-GTK</span>")
	
	hsep	:= gtk.NewHSeparator()
	
	red	:= gtk.NewRadioButtonWithLabel(nil,  "Red")
	green	:= gtk.NewRadioButtonWithLabel(red.GetGroup(), "Green")
	blue	:= gtk.NewRadioButtonWithLabel(red.GetGroup(), "Blue")
	
	red	.  Connect("clicked", func() {
		if red.GetActive() {
			label.SetMarkup("<span foreground='red' size='19000'>Hello Go-GTK</span>")
		}
	})
	
	green	.  Connect("clicked", func() {
		if green.GetActive() {
			label.SetMarkup("<span foreground='green' size='19000'>Hello Go-GTK</span>")
		}
	})
	
	blue	.  Connect("clicked", func() {
		if blue.GetActive() {
			label.SetMarkup("<span foreground='blue' size='19000'>Hello Go-GTK</span>")
		}
	})
	
	hbox	:= gtk.NewHBox(false, 10)
	hbox	.  Add(red)
	hbox	.  Add(green)
	hbox	.  Add(blue)
	
	vbox	:= gtk.NewVBox(true, 0)
	vbox	.  Add(label)
	vbox	.  Add(hsep)
	vbox	.  Add(hbox)
	
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(vbox)
	window	.  Add(align)
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run radiobutton.go
    


実行結果



トグルボタン

togglebutton.go


package main

import (
	"github.com/mattn/go-gtk/gdk"
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Radio Button")
	window	.  SetPosition(gtk.WIN_POS_CENTER)	
	window	.  Connect("destroy", gtk.MainQuit)
	
	var	gdkwin	*gdk.Window
	var	pixmap	*gdk.Pixmap
	var	gc	*gdk.GC
	r	:= uint16(0)
	g	:= uint16(0)
	b	:= uint16(0)
	
	red	:= gtk.NewToggleButtonWithLabel("Red")
	green	:= gtk.NewToggleButtonWithLabel("Green")
	blue	:= gtk.NewToggleButtonWithLabel("Blue")
	
	red	.  SetSizeRequest(100, 28)
	green	.  SetSizeRequest(100, 28)
	blue	.  SetSizeRequest(100, 28)
	
	red	.  Connect("clicked", func() {
		if red.GetActive() {
			r = 65535
		} else {
			r = 0
		}
		gc	.  SetRgbFgColor(gdk.NewColorRGB(r, g, b))
		pixmap	.  GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1)
		gdkwin.GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1)
	})
	
	green	.  Connect("clicked", func() {
		if green.GetActive() {
			g = 65535
		} else {
			g = 0
		}
		gc	.  SetRgbFgColor(gdk.NewColorRGB(r, g, b))
		pixmap	.  GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1)
		gdkwin.GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1)
	})
	
	blue	.  Connect("clicked", func() {
		if blue.GetActive() {
			b = 65535
		} else {
			b = 0
		}
		gc	.  SetRgbFgColor(gdk.NewColorRGB(r, g, b))
		pixmap	.  GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1)
		gdkwin.GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1)
	})
	
	drawing	:= gtk.NewDrawingArea()
	drawing	.  Connect("configure-event", func() {
		alloc	:= drawing.GetAllocation()
		pixmap	 = gdk.NewPixmap(drawing.GetWindow().GetDrawable(), alloc.Width, alloc.Height, 24)
		gc	 = gdk.NewGC(pixmap.GetDrawable())
		gc	.  SetRgbFgColor(gdk.NewColorRGB(r, g, b))
		pixmap	.  GetDrawable().DrawRectangle(gc, true, 0, 0, -1, -1)
	})
	drawing	.  Connect("expose-event", func() {
		gdkwin.GetDrawable().DrawDrawable(gc, pixmap.GetDrawable(), 0, 0, 0, 0, -1, -1)
	})
	
	vbox	:= gtk.NewVBox(false, 10)
	vbox	.  Add(red)
	vbox	.  Add(green)
	vbox	.  Add(blue)
	
	hbox	:= gtk.NewHBox(true, 20)
	hbox	.  Add(vbox)
	hbox	.  Add(drawing)
		
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(hbox)
	window	.  Add(align)
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	
	gdkwin	 = drawing.GetWindow()
	
	gtk	.  Main()
}
	


実行方法

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


go run togglebutton.go
    


実行結果



スケール

scale.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Scale")
	window	.  SetPosition(gtk.WIN_POS_CENTER)	
	window	.  Connect("destroy", gtk.MainQuit)
	
	frame	:= gtk.NewFrame("Middle")
	frame	.  SetBorderWidth(20)
	
	align	:= gtk.NewAlignment(0.5, 0.5, 0.9, 0.9)
	
	scale	:= gtk.NewHScaleWithRange(0, 100, 1)
	scale	.  SetValue(50)
	
	scale	.  Connect("value-changed", func() {
		switch {
		case scale.GetValue() >= 70:
			frame.SetLabel("Hige")
		case scale.GetValue() <= 30:
			frame.SetLabel("Low")
		default:
			frame.SetLabel("Middle")
		}
	})
	
	align	.  Add(scale)
	frame	.  Add(align)
	window	.  Add(frame)
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run scale.go
    


実行結果


コンボボックス

conbobox.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Combo Box")
	window	.  SetPosition(gtk.WIN_POS_CENTER)
	window	.  SetBorderWidth(10)
	window	.  Connect("destroy", gtk.MainQuit)
	
	combo	:= gtk.NewComboBoxText()
	combo	.  AppendText("Ubuntu")
	combo	.  AppendText("CentOS")
	combo	.  AppendText("Mint")
	combo	.  SetActive(0)
	
	label	:= gtk.NewLabel("Ubuntu")
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(label)
	
	vbox	:= gtk.NewVBox(false, 0)
	vbox	.  PackStart(combo,false, false, 0)
	vbox	.  Add(align)
	window	.  Add(vbox)
	
	combo	.  Connect("changed", func() {
		label.SetLabel(combo.GetActiveText())
	})
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run combobox.go
    


実行結果


コンボボックスエントリー

conboboxentry.go


package main

import (
	"github.com/mattn/go-gtk/gtk"
	"os"
)

func main() {
	gtk	.  Init(&os.Args)
	window	:= gtk.NewWindow(gtk.WINDOW_TOPLEVEL)
	window	.  SetTitle("Combo Box Entry")
	window	.  SetPosition(gtk.WIN_POS_CENTER)
	window	.  SetBorderWidth(10)
	window	.  Connect("destroy", gtk.MainQuit)
	
	combo	:= gtk.NewComboBoxTextWithEntry()
	combo	.  AppendText("Ubuntu")
	combo	.  AppendText("CentOS")
	combo	.  AppendText("Mint")
	combo	.  SetActive(0)
	
	label	:= gtk.NewLabel("Ubuntu")
	align	:= gtk.NewAlignment(0.5, 0.5, 0, 0)
	align	.  Add(label)
	
	vbox	:= gtk.NewVBox(false, 0)
	vbox	.  PackStart(combo,false, false, 0)
	vbox	.  Add(align)
	window	.  Add(vbox)
	
	combo	.  Connect("changed", func() {
		label.SetLabel(combo.GetActiveText())
	})
	
	window	.  ShowAll()
	window	.  SetSizeRequest(400, 250)
	gtk	.  Main()
}
	


実行方法

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


go run comboboxentry.go
    


実行結果


964 visits
Posted: Jul. 27, 2019
Update: Aug. 03, 2019

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