Whats
Go bindings for GTK
Go bindings for GTK
To experiment with go-gtk, you can just compile and run the example program:
# git clone https://github.com/mattn/go-gtk # cd go-gtk # make install # make example # ./example/demo/demoor
# go get github.com/mattn/go-gtk/gtk
package main
import (
"os"
"github.com/mattn/go-gtk/gtk"
"path"
)
func main() {
gtk.Init(&os.Args)
window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL)
window.SetTitle("GTK Go!")
window.Connect("destroy", func() {
println("got destroy!")
gtk.MainQuit()
})
//--------------------------------------------------------
// GtkVBox
//--------------------------------------------------------
vbox := gtk.VBox(false, 1)
//--------------------------------------------------------
// GtkImage
//--------------------------------------------------------
dir, _ := path.Split(os.Args[0])
imagefile := path.Join(dir, "../data/go-gtk-logo.png")
label := gtk.Label("Go Binding for GTK")
vbox.PackStart(label, false, true, 0)
entry := gtk.Entry()
entry.SetText("Hello world")
vbox.Add(entry)
image := gtk.ImageFromFile(imagefile)
vbox.Add(image)
//--------------------------------------------------------
// GtkHBox
//--------------------------------------------------------
buttons := gtk.HBox(false, 1)
//--------------------------------------------------------
// GtkButton
//--------------------------------------------------------
button := gtk.ButtonWithLabel("Button with label")
button.Clicked(func() {
print("button clicked: ", button.GetLabel(), "\n")
dialog := gtk.MessageDialog(
button.GetTopLevelAsWindow(),
gtk.GTK_DIALOG_MODAL,
gtk.GTK_MESSAGE_INFO,
gtk.GTK_BUTTONS_OK,
entry.GetText())
dialog.Response(func() {
println("Dialog OK!")
})
dialog.Run()
dialog.Destroy()
})
buttons.Add(button)
//--------------------------------------------------------
// GtkFontButton
//--------------------------------------------------------
fontbutton := gtk.FontButton()
fontbutton.Connect("font-set", func() {
print("title: ", fontbutton.GetTitle(), "\n")
print("fontname: ", fontbutton.GetFontName(), "\n")
print("use_size: ", fontbutton.GetUseSize(), "\n")
print("show_size: ", fontbutton.GetShowSize(), "\n")
})
buttons.Add(fontbutton)
vbox.Add(buttons)
buttons = gtk.HBox(false, 1)
//--------------------------------------------------------
// GtkToggleButton
//--------------------------------------------------------
togglebutton := gtk.ToggleButtonWithLabel("ToggleButton with label")
togglebutton.Connect("toggled", func() {
if togglebutton.GetActive() {
togglebutton.SetLabel("ToggleButton ON!")
} else {
togglebutton.SetLabel("ToggleButton OFF!")
}
})
buttons.Add(togglebutton)
//--------------------------------------------------------
// GtkCheckButton
//--------------------------------------------------------
checkbutton := gtk.CheckButtonWithLabel("CheckButton with label")
checkbutton.Connect("toggled", func() {
if checkbutton.GetActive() {
checkbutton.SetLabel("CheckButton CHECKED!")
} else {
checkbutton.SetLabel("CheckButton UNCHECKED!")
}
})
buttons.Add(checkbutton)
vbox.Add(buttons)
combos := gtk.HBox(false, 1)
comboboxentry := gtk.ComboBoxEntryNewText()
comboboxentry.Connect("changed", func() {
//comboboxentry...
})
combos.Add(comboboxentry)
vbox.Add(combos)
window.Add(vbox)
window.ShowAll()
gtk.Main()
}
The library is available under the same terms and conditions as the Go, the BSD style license, and the LGPL (Lesser GNU Public License). The idea is that if you can use Go (and Gtk) in a project, you should also be able to use go-gtk.
Project authors:
Project goal:
Hopefully support following widgets and methods enough to run general application.
Main Loop and Events : 24% ( 6/ 25)
GtkAccelGroup : 10% ( 2/ 19)
GtkAccelMap : 0% ( 0/ 14)
GtkClipboard : 23% ( 7/ 30)
Drag and Drop : 11% ( 4/ 35)
GtkIconTheme : 0% ( 0/ 31)
GtkStockItem : 66% ( 4/ 6)
Themeable Stock Images : 0% ( 0/ 41)
Resource Files : 0% ( 0/ 28)
GtkSettings : 23% ( 3/ 13)
GtkBinding : 0% ( 0/ 14)
Graphics Contexts : 0% ( 0/ 2)
GtkStyle : 0% ( 0/ 64)
Selections : 8% ( 4/ 47)
Version Information : 0% ( 0/ 6)
Testing : 0% ( 0/ 16)
Filesystem Utilities : 0% ( 0/ 7)
GtkDialog : 45% ( 9/ 20)
GtkMessageDialog : 62% ( 5/ 8)
GtkWindow : 23% ( 24/102)
GtkWindowGroup : 0% ( 0/ 5)
GtkAboutDialog : 90% ( 29/ 32)
GtkAssistant : 91% ( 21/ 23)
GtkOffscreenWindow : 0% ( 0/ 3)
GtkAccelLabel : 83% ( 5/ 6)
GtkImage : 29% ( 9/ 31)
GtkLabel : 86% ( 39/ 45)
GtkProgressBar : 83% ( 10/ 12)
GtkStatusbar : 77% ( 7/ 9)
GtkInfoBar : 100% ( 12/ 12)
GtkStatusIcon : 68% ( 26/ 38)
GtkSpinner : 0% ( 0/ 3)
GtkButton : 55% ( 15/ 27)
GtkCheckButton : 100% ( 3/ 3)
GtkRadioButton : 100% ( 8/ 8)
GtkToggleButton : 100% ( 9/ 9)
GtkLinkButton : 75% ( 6/ 8)
GtkScaleButton : 0% ( 0/ 9)
GtkVolumeButton : 0% ( 0/ 1)
GtkEntry : 38% ( 24/ 63)
GtkEntryBuffer : 72% ( 8/ 11)
GtkEntryCompletion : 96% ( 24/ 25)
GtkHScale : 100% ( 2/ 2)
GtkVScale : 100% ( 2/ 2)
GtkSpinButton : 0% ( 0/ 25)
GtkEditable : 100% ( 13/ 13)
GtkTextIter : 20% ( 19/ 91)
GtkTextMark : 0% ( 0/ 7)
GtkTextBuffer : 67% ( 52/ 77)
GtkTextTag : 75% ( 3/ 4)
GtkTextAttributes : 100% ( 5/ 5)
GtkTextTagTable : 83% ( 5/ 6)
GtkTextView : 28% ( 18/ 64)
GtkTreePath : 84% ( 16/ 19)
GtkTreeRowReference : 0% ( 0/ 10)
GtkTreeIter : 100% ( 1/ 1)
GtkTreeModel : 57% ( 15/ 26)
GtkTreeSelection : 75% ( 15/ 20)
GtkTreeViewColumn : 37% ( 20/ 53)
GtkTreeView : 14% ( 14/ 97)
GtkTreeView drag-and-drop : 0% ( 0/ 7)
GtkCellView : 0% ( 0/ 11)
GtkIconView : 16% ( 10/ 62)
GtkTreeSortable : 0% ( 0/ 6)
GtkTreeModelSort : 0% ( 0/ 9)
GtkTreeModelFilter : 0% ( 0/ 11)
GtkCellLayout : 0% ( 0/ 9)
GtkCellRenderer : 100% ( 2/ 2)
GtkCellEditable : 0% ( 0/ 3)
GtkCellRendererAccel : 100% ( 1/ 1)
GtkCellRendererCombo : 100% ( 1/ 1)
GtkCellRendererPixbuf : 100% ( 1/ 1)
GtkCellRendererProgress : 100% ( 1/ 1)
GtkCellRendererSpin : 100% ( 1/ 1)
GtkCellRendererText : 100% ( 2/ 2)
GtkCellRendererToggle : 100% ( 7/ 7)
GtkCellRendererSpinner : 100% ( 1/ 1)
GtkListStore : 83% ( 15/ 18)
GtkTreeStore : 80% ( 17/ 21)
GtkComboBox : 78% ( 30/ 38)
GtkComboBoxText : 100% ( 7/ 7)
GtkComboBoxEntry : 80% ( 4/ 5)
GtkMenu : 50% ( 15/ 30)
GtkMenuBar : 100% ( 8/ 8)
GtkMenuItem : 78% ( 15/ 19)
GtkImageMenuItem : 0% ( 0/ 11)
GtkRadioMenuItem : 0% ( 0/ 9)
GtkCheckMenuItem : 100% ( 10/ 10)
GtkSeparatorMenuItem : 100% ( 1/ 1)
GtkTearoffMenuItem : 100% ( 1/ 1)
GtkToolShell : 0% ( 0/ 9)
GtkToolbar : 0% ( 0/ 34)
GtkToolItem : 0% ( 0/ 29)
GtkToolPalette : 0% ( 0/ 22)
GtkToolItemGroup : 0% ( 0/ 17)
GtkSeparatorToolItem : 0% ( 0/ 3)
GtkToolButton : 0% ( 0/ 14)
GtkMenuToolButton : 0% ( 0/ 7)
GtkToggleToolButton : 0% ( 0/ 4)
GtkRadioToolButton : 0% ( 0/ 6)
GtkUIManager : 0% ( 0/ 17)
GtkActionGroup : 0% ( 0/ 20)
GtkAction : 0% ( 0/ 46)
GtkToggleAction : 0% ( 0/ 6)
GtkRadioAction : 0% ( 0/ 5)
GtkRecentAction : 0% ( 0/ 4)
GtkActivatable : 0% ( 0/ 6)
GtkColorButton : 0% ( 0/ 10)
GtkColorSelectionDialog : 0% ( 0/ 2)
GtkColorSelection : 0% ( 0/ 21)
GtkHSV : 0% ( 0/ 8)
GtkFileChooser : 22% ( 13/ 58)
GtkFileChooserButton : 0% ( 0/ 9)
GtkFileChooserDialog : 100% ( 1/ 1)
GtkFileChooserWidget : 0% ( 0/ 2)
GtkFileFilter : 55% ( 5/ 9)
GtkFontButton : 71% ( 10/ 14)
GtkFontSelection : 0% ( 0/ 14)
GtkFontSelectionDialog : 37% ( 3/ 8)
GtkInputDialog : 0% ( 0/ 1)
GtkAlignment : 100% ( 4/ 4)
GtkAspectFrame : 0% ( 0/ 2)
GtkHBox : 100% ( 1/ 1)
GtkVBox : 100% ( 1/ 1)
GtkHButtonBox : 0% ( 0/ 5)
GtkVButtonBox : 0% ( 0/ 5)
GtkFixed : 100% ( 5/ 5)
GtkHPaned : 100% ( 1/ 1)
GtkVPaned : 100% ( 1/ 1)
GtkLayout : 0% ( 0/ 12)
GtkNotebook : 90% ( 50/ 55)
GtkTable : 93% ( 14/ 15)
GtkExpander : 87% ( 14/ 16)
GtkOrientable : 0% ( 0/ 2)
GtkFrame : 100% ( 9/ 9)
GtkHSeparator : 100% ( 1/ 1)
GtkVSeparator : 100% ( 1/ 1)
GtkHScrollbar : 0% ( 0/ 1)
GtkVScrollbar : 0% ( 0/ 1)
GtkScrolledWindow : 86% ( 13/ 15)
GtkPrintOperation : 13% ( 5/ 36)
GtkPrintContext : 18% ( 2/ 11)
GtkPrintSettings : 0% ( 0/ 74)
GtkPageSetup : 0% ( 0/ 25)
GtkPaperSize : 0% ( 0/ 21)
GtkPrinter : 0% ( 0/ 23)
GtkPrintJob : 0% ( 0/ 10)
GtkPrintUnixDialog : 0% ( 0/ 18)
GtkPageSetupUnixDialog : 0% ( 0/ 5)
GtkAdjustment : 82% ( 14/ 17)
GtkArrow : 0% ( 0/ 2)
GtkCalendar : 0% ( 0/ 17)
GtkDrawingArea : 100% ( 2/ 2)
GtkEventBox : 20% ( 1/ 5)
GtkHandleBox : 0% ( 0/ 8)
GtkIMContextSimple : 0% ( 0/ 2)
GtkIMMulticontext : 0% ( 0/ 4)
GtkSizeGroup : 100% ( 8/ 8)
GtkTooltip : 60% ( 6/ 10)
GtkViewport : 100% ( 9/ 9)
GtkAccessible : 100% ( 3/ 3)
GtkBin : 100% ( 1/ 1)
GtkBox : 100% ( 11/ 11)
GtkButtonBox : 0% ( 0/ 10)
GtkContainer : 18% ( 6/ 33)
GtkItem : 100% ( 3/ 3)
GtkMenuShell : 0% ( 0/ 11)
GtkMisc : 0% ( 0/ 4)
GtkObject : 100% ( 0/ 0)
GtkPaned : 88% ( 8/ 9)
GtkRange : 53% ( 16/ 30)
GtkScale : 90% ( 9/ 10)
GtkSeparator : 100% ( 0/ 0)
GtkWidget : 50% ( 90/180)
GtkIMContext : 0% ( 0/ 11)
GtkPlug : 0% ( 0/ 7)
GtkSocket : 0% ( 0/ 5)
GtkRecentManager : 0% ( 0/ 37)
GtkRecentChooser : 0% ( 0/ 33)
GtkRecentChooserDialog : 0% ( 0/ 2)
GtkRecentChooserMenu : 0% ( 0/ 4)
GtkRecentChooserWidget : 0% ( 0/ 2)
GtkRecentFilter : 0% ( 0/ 12)
GtkBuildable : 0% ( 0/ 10)
Total progress : 33% (1021/3053)