Помогите с golang gui

Пользователь

Мне хочется поработать с golang gui, но что-то пошло не так. Что-то вообще не понимаю до конца как правильно этим пользоваться.

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp Pocket
29 мая 2020 г., 12:45

Пользователь

Здесь так просто не разобраться, ведь golang gui это набор виджетов для создания приложений с пользовательским интерфейсом. Вам чтоб начать делать такие приложения, нужно обзавестись библиотекой gtk. Вам нужно плотно поработать с этой библиотекой.

29 мая 2020 г., 12:52

Пользователь

Чтоб было, над чем работать, вот пример с gtk библиотекой.


package main

 

import (

    "gtk"

)

 

func main() {

    gtk.Init(nil)

    window := gtk.Window(gtk.GTK_WINDOW_TOPLEVEL)

    window.SetTitle("gtk-go example")

    window.Connect("destroy", func(ctx *gtk.CallbackContext) {

        println(ctx.Data().(string))

        gtk.MainQuit()

    }, "data for callback function")

     

    vbox := gtk.VBox(false, 1)

 

    frame := gtk.Frame("Demo")

    framebox := gtk.VBox(false, 1)

    frame.Add(framebox)

 

    entry := gtk.Entry()

    entry.SetText("<Name>")

    framebox.Add(entry)

 

    buttons := gtk.HBox(false, 1)

 

    button := gtk.ButtonWithLabel("Hello me")

    button.Clicked(func() {

        print("button clicked: ", button.GetLabel(), "\n")

        messagedialog := gtk.MessageDialog(

            button.GetTopLevelAsWindow(),

            gtk.GTK_DIALOG_MODAL,

            gtk.GTK_MESSAGE_INFO,

            gtk.GTK_BUTTONS_OK,

            "Hello, " + entry.GetText())

        messagedialog.Response(func() {

 

             

            messagedialog.Destroy()

        })

        messagedialog.Run()

    })

    buttons.Add(button)

 

    framebox.Add(buttons)

 

    menubar := gtk.MenuBar()

    vbox.PackStart(menubar, false, false, 0)

 

 

    cascademenu := gtk.MenuItemWithMnemonic("_File")

    menubar.Append(cascademenu)

    submenu := gtk.Menu()

    cascademenu.SetSubmenu(submenu)

 

    menuitem := gtk.MenuItemWithMnemonic("E_xit")

    menuitem.Connect("activate", func() {

        gtk.MainQuit()

    })

    submenu.Append(menuitem)

 

     

    cascademenu = gtk.MenuItemWithMnemonic("_Help")

    menubar.Append(cascademenu)

    submenu = gtk.Menu()

    cascademenu.SetSubmenu(submenu)

 

    menuitem = gtk.MenuItemWithMnemonic("_About")

    menuitem.Connect("activate", func() {

        dialog := gtk.AboutDialog()

        dialog.SetName("go-gtk library")

        dialog.SetProgramName("helloworlder 1.0")

         

        dialog.Run()

        dialog.Destroy()

    })

    submenu.Append(menuitem)

     

 

    vbox.Add(frame)

 

    window.Add(vbox)

    window.SetSizeRequest(400, 100)

    window.ShowAll()

    gtk.Main()

}

29 мая 2020 г., 13:26

Пользователь

Как по мне, так это самое малое приложение на gtk

package main

 

import (

 "os"

 "github.com/mattn/go-gtk/gtk"

)

 

func main() {

 gtk.Init(&os.Args)

 gtk.Main()

}


Разбираться лучше с малым объемом кода.

29 мая 2020 г., 13:39

Пользователь

Забыли упомянуть, что в Goland, не только gtk является библиотекой, с возможностью создавать приложения, с пользовательским интерфейсом. Существуют еще Qt и другие

  

29 мая 2020 г., 14:57

Пользователь

Кстати, библиотеку можно загрузить с https://github.com/mattn/go-gtk

Можно еще получить ее с помощью команды git clone https://github.com/mattn/go-gtk.git

1 июня 2020 г., 18:22

Пользователь

alexandra_jones: Кстати, библиотеку можно загрузить с https://github.com/mattn/go-gtkМожно еще получить ее с помощью команды git clone https://github.com/mattn/go-gtk.git

@alexandra_jones Оно только под Linux или под Windows они тоже нормально встают ?

14 июля 2020 г., 17:49