Go-GTK
文章推薦指數: 80 %
Whats. Go bindings for GTK · Install. To experiment with go-gtk, you can just compile and run the example program: # git clone https://github.com/mattn/go-gtk # ... Whats GobindingsforGTK Install Toexperimentwithgo-gtk,youcanjustcompileandruntheexampleprogram: #gitclonehttps://github.com/mattn/go-gtk #cdgo-gtk #makeinstall #makeexample #./example/demo/demo or #gogetgithub.com/mattn/go-gtk/gtk CodingStyle package main import ( "github.com/mattn/go-gtk/gdkpixbuf" "github.com/mattn/go-gtk/glib" "github.com/mattn/go-gtk/gtk" "os" "os/exec" "path" "regexp" "sort" "strings" ) func uniq(strings[]string)(ret[]string){ return } func authors()[]string { if b,err:=exec.Command("git", "log").Output();err== nil { lines:=strings.Split(string(b), "\n") var a[]string r:=regexp.MustCompile(`^Author:\s*([^"} } func main(){ var menuitem*gtk.MenuItem gtk.Init(nil) window:=gtk.NewWindow(gtk.WINDOW_TOPLEVEL) window.SetPosition(gtk.WIN_POS_CENTER) window.SetTitle("GTKGo!") window.SetIconName("gtk-dialog-info") window.Connect("destroy", func(ctx*glib.CallbackContext){ println("gotdestroy!",ctx.Data().(string)) gtk.MainQuit() }, "foo") //-------------------------------------------------------- //GtkVBox //-------------------------------------------------------- vbox:=gtk.NewVBox(false, 1) //-------------------------------------------------------- //GtkMenuBar //-------------------------------------------------------- menubar:=gtk.NewMenuBar() vbox.PackStart(menubar, false, false, 0) //-------------------------------------------------------- //GtkVPaned //-------------------------------------------------------- vpaned:=gtk.NewVPaned() vbox.Add(vpaned) //-------------------------------------------------------- //GtkFrame //-------------------------------------------------------- frame1:=gtk.NewFrame("Demo") framebox1:=gtk.NewVBox(false, 1) frame1.Add(framebox1) frame2:=gtk.NewFrame("Demo") framebox2:=gtk.NewVBox(false, 1) frame2.Add(framebox2) vpaned.Pack1(frame1, false, false) vpaned.Pack2(frame2, false, false) //-------------------------------------------------------- //GtkImage //-------------------------------------------------------- dir,_:=path.Split(os.Args[0]) imagefile:=path.Join(dir, "../../data/go-gtk-logo.png") label:=gtk.NewLabel("GoBindingforGTK") label.ModifyFontEasy("DejaVuSerif15") framebox1.PackStart(label, false, true, 0) //-------------------------------------------------------- //GtkEntry //-------------------------------------------------------- entry:=gtk.NewEntry() entry.SetText("Helloworld") framebox1.Add(entry) image:=gtk.NewImageFromFile(imagefile) framebox1.Add(image) //-------------------------------------------------------- //GtkScale //-------------------------------------------------------- scale:=gtk.NewHScaleWithRange(0, 100, 1) scale.Connect("value-changed", func(){ println("scale:", int(scale.GetValue())) }) framebox2.Add(scale) //-------------------------------------------------------- //GtkHBox //-------------------------------------------------------- buttons:=gtk.NewHBox(false, 1) //-------------------------------------------------------- //GtkButton //-------------------------------------------------------- button:=gtk.NewButtonWithLabel("Buttonwithlabel") button.Clicked(func(){ println("buttonclicked:",button.GetLabel()) messagedialog:=gtk.NewMessageDialog( button.GetTopLevelAsWindow(), gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, entry.GetText()) messagedialog.Response(func(){ println("DialogOK!") //-------------------------------------------------------- //GtkFileChooserDialog //-------------------------------------------------------- filechooserdialog:=gtk.NewFileChooserDialog( "ChooseFile...", button.GetTopLevelAsWindow(), gtk.FILE_CHOOSER_ACTION_OPEN, gtk.STOCK_OK, gtk.RESPONSE_ACCEPT) filter:=gtk.NewFileFilter() filter.AddPattern("*.go") filechooserdialog.AddFilter(filter) filechooserdialog.Response(func(){ println(filechooserdialog.GetFilename()) filechooserdialog.Destroy() }) filechooserdialog.Run() messagedialog.Destroy() }) messagedialog.Run() }) buttons.Add(button) //-------------------------------------------------------- //GtkFontButton //-------------------------------------------------------- fontbutton:=gtk.NewFontButton() fontbutton.Connect("font-set", func(){ println("title:",fontbutton.GetTitle()) println("fontname:",fontbutton.GetFontName()) println("use_size:",fontbutton.GetUseSize()) println("show_size:",fontbutton.GetShowSize()) }) buttons.Add(fontbutton) framebox2.PackStart(buttons, false, false, 0) buttons=gtk.NewHBox(false, 1) //-------------------------------------------------------- //GtkToggleButton //-------------------------------------------------------- togglebutton:=gtk.NewToggleButtonWithLabel("ToggleButtonwithlabel") togglebutton.Connect("toggled", func(){ if togglebutton.GetActive(){ togglebutton.SetLabel("ToggleButtonON!") } else { togglebutton.SetLabel("ToggleButtonOFF!") } }) buttons.Add(togglebutton) //-------------------------------------------------------- //GtkCheckButton //-------------------------------------------------------- checkbutton:=gtk.NewCheckButtonWithLabel("CheckButtonwithlabel") checkbutton.Connect("toggled", func(){ if checkbutton.GetActive(){ checkbutton.SetLabel("CheckButtonCHECKED!") } else { checkbutton.SetLabel("CheckButtonUNCHECKED!") } }) buttons.Add(checkbutton) //-------------------------------------------------------- //GtkRadioButton //-------------------------------------------------------- buttonbox:=gtk.NewVBox(false, 1) radiofirst:=gtk.NewRadioButtonWithLabel(nil, "Radio1") buttonbox.Add(radiofirst) buttonbox.Add(gtk.NewRadioButtonWithLabel(radiofirst.GetGroup(), "Radio2")) buttonbox.Add(gtk.NewRadioButtonWithLabel(radiofirst.GetGroup(), "Radio3")) buttons.Add(buttonbox) //radiobutton.SetMode(false); radiofirst.SetActive(true) framebox2.PackStart(buttons, false, false, 0) //-------------------------------------------------------- //GtkVSeparator //-------------------------------------------------------- vsep:=gtk.NewVSeparator() framebox2.PackStart(vsep, false, false, 0) //-------------------------------------------------------- //GtkComboBoxEntry //-------------------------------------------------------- combos:=gtk.NewHBox(false, 1) comboboxentry:=gtk.NewComboBoxEntryNewText() comboboxentry.AppendText("Monkey") comboboxentry.AppendText("Tiger") comboboxentry.AppendText("Elephant") comboboxentry.Connect("changed", func(){ println("value:",comboboxentry.GetActiveText()) }) combos.Add(comboboxentry) //-------------------------------------------------------- //GtkComboBox //-------------------------------------------------------- combobox:=gtk.NewComboBoxNewText() combobox.AppendText("Peach") combobox.AppendText("Banana") combobox.AppendText("Apple") combobox.SetActive(1) combobox.Connect("changed", func(){ println("value:",combobox.GetActiveText()) }) combos.Add(combobox) framebox2.PackStart(combos, false, false, 0) //-------------------------------------------------------- //GtkTextView //-------------------------------------------------------- swin:=gtk.NewScrolledWindow(nil, nil) swin.SetPolicy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC) swin.SetShadowType(gtk.SHADOW_IN) textview:=gtk.NewTextView() var start,endgtk.TextIter buffer:=textview.GetBuffer() buffer.GetStartIter(&start) buffer.Insert(&start, "Hello") buffer.GetEndIter(&end) buffer.Insert(&end, "World!") tag:=buffer.CreateTag("bold", map[string]string{ "background": "#FF0000", "weight": "700"}) buffer.GetStartIter(&start) buffer.GetEndIter(&end) buffer.ApplyTag(tag,&start,&end) swin.Add(textview) framebox2.Add(swin) buffer.Connect("changed", func(){ println("changed") }) //-------------------------------------------------------- //GtkMenuItem //-------------------------------------------------------- cascademenu:=gtk.NewMenuItemWithMnemonic("_File") menubar.Append(cascademenu) submenu:=gtk.NewMenu() cascademenu.SetSubmenu(submenu) menuitem=gtk.NewMenuItemWithMnemonic("E_xit") menuitem.Connect("activate", func(){ gtk.MainQuit() }) submenu.Append(menuitem) cascademenu=gtk.NewMenuItemWithMnemonic("_View") menubar.Append(cascademenu) submenu=gtk.NewMenu() cascademenu.SetSubmenu(submenu) checkmenuitem:=gtk.NewCheckMenuItemWithMnemonic("_Disable") checkmenuitem.Connect("activate", func(){ vpaned.SetSensitive(!checkmenuitem.GetActive()) }) submenu.Append(checkmenuitem) menuitem=gtk.NewMenuItemWithMnemonic("_Font") menuitem.Connect("activate", func(){ fsd:=gtk.NewFontSelectionDialog("Font") fsd.SetFontName(fontbutton.GetFontName()) fsd.Response(func(){ println(fsd.GetFontName()) fontbutton.SetFontName(fsd.GetFontName()) fsd.Destroy() }) fsd.SetTransientFor(window) fsd.Run() }) submenu.Append(menuitem) cascademenu=gtk.NewMenuItemWithMnemonic("_Help") menubar.Append(cascademenu) submenu=gtk.NewMenu() cascademenu.SetSubmenu(submenu) menuitem=gtk.NewMenuItemWithMnemonic("_About") menuitem.Connect("activate", func(){ dialog:=gtk.NewAboutDialog() dialog.SetName("Go-GtkDemo!") dialog.SetProgramName("demo") dialog.SetAuthors(authors()) dir,_:=path.Split(os.Args[0]) imagefile:=path.Join(dir, "../../data/mattn-logo.png") pixbuf,_:=gdkpixbuf.NewPixbufFromFile(imagefile) dialog.SetLogo(pixbuf) dialog.SetLicense("ThelibraryisavailableunderthesametermsandconditionsastheGo,theBSDstylelicense,andtheLGPL(LesserGNUPublicLicense).TheideaisthatifyoucanuseGo(andGtk)inaproject,youshouldalsobeabletousego-gtk.") dialog.SetWrapLicense(true) dialog.Run() dialog.Destroy() }) submenu.Append(menuitem) //-------------------------------------------------------- //GtkStatusbar //-------------------------------------------------------- statusbar:=gtk.NewStatusbar() context_id:=statusbar.GetContextId("go-gtk") statusbar.Push(context_id, "GTKbindingforGo!") framebox2.PackStart(statusbar, false, false, 0) //-------------------------------------------------------- //Event //-------------------------------------------------------- window.Add(vbox) window.SetSizeRequest(600, 600) window.ShowAll() gtk.Main() } Screenshot Repository http://github.com/mattn/go-gtk/ License ThelibraryisavailableunderthesametermsandconditionsastheGo,theBSDstylelicense,andtheLGPL(LesserGNUPublicLicense).TheideaisthatifyoucanuseGo(andGtk)inaproject,youshouldalsobeabletousego-gtk. Author Projectauthors: YasuhiroMatsumoto DavidRoundy MarkAndrewGerads TobiasKortkamp MikhailTrushnikov FedericoSogaro Goal Projectgoal: Hopefullysupportfollowingwidgetsandmethodsenoughtorungeneralapplication. MainLoopandEvents:24%(6/25) GtkAccelGroup:10%(2/19) GtkAccelMap:0%(0/14) GtkClipboard:23%(7/30) DragandDrop:11%(4/35) GtkIconTheme:0%(0/31) GtkStockItem:66%(4/6) ThemeableStockImages:0%(0/41) ResourceFiles:0%(0/28) GtkSettings:23%(3/13) GtkBinding:0%(0/14) GraphicsContexts:0%(0/2) GtkStyle:0%(0/64) Selections:8%(4/47) VersionInformation:0%(0/6) Testing:0%(0/16) FilesystemUtilities: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) GtkTreeViewdrag-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) Totalprogress:33%(1021/3053)
延伸文章資訊
- 1gtk - pkg.dev
Whenever a native GTK call could return an unexpected NULL pointer, an additional error is return...
- 2Golang gtk.GtkWidget類代碼示例- 純淨天空
本文整理匯總了Golang中github.com/agl/go-gtk/gtk.GtkWidget類的典型用法代碼示例。如果您正苦於以下問題:Golang GtkWidget類的具體用法?Gol...
- 3Golang gtk.Window函數代碼示例- 純淨天空
本文整理匯總了Golang中github.com/mattn/go-gtk/gtk.Window函數的典型用法代碼示例。如果您正苦於以下問題:Golang Window函數的具體用法?Golan...
- 4gtk - pkg.dev
Go Bindings for Gtk+ 2. Support version 2.16 and later. Index ¶. Constants; func ABOUT_DIALOG(p *...
- 5mattn/go-gtk: Go binding for GTK - GitHub
Go binding for GTK. Contribute to mattn/go-gtk development by creating an account on GitHub.