Skip to content

etel/walk

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About Walk

Walk is a "Windows Application Library Kit" for the Go Programming Language.

Its focus is graphical user interfaces but there is some more stuff.

Setup

Make sure you have a working Go installation. See Getting Started

Now run go get github.com/lxn/walk

Using Walk

There are three options to create GUIs with Walk:

  1. Imperative code ==================

    package main

    import "github.com/lxn/walk"

    func newMainWindow() (*walk.MainWindow, error) { mw, err := walk.NewMainWindow() if err != nil { return nil, err }

     succeeded := false
     defer func(){
     	if !succeeded {
     		mw.Dispose()
     	}
     }()
     
     if err := mw.SetTitle("My Cool App"); err != nil {
     	return nil, err
     }
     
     if err := mw.SetMinMaxSize(walk.Size{400, 300}, walk.Size{}); err != nil {
     	return nil, err
     }
     
     if err := mw.SetLayout(walk.NewVBoxLayout()); err != nil {
     	return nil, err
     }
     
     pb, err := walk.NewPushButton(mw)
     if err != nil {
     	return nil, err
     }
     
     if err := pb.SetText("Don't Click Me!"); err != nil {
     	return nil, err
     }
     
     pb.Clicked().Attach(func() {
     	panic("Ouch!")
     })
     
     succeeded = true
     
     return mw, nil
    

    }

Using this approach, a lot of error handling is required. In this code it is hard to see the hierarchical structure of the GUI.

  1. Declarative code ===================

    package main

    import ( "github.com/lxn/walk" . "github.com/lxn/walk/declarative" )

    func newMainWindow() (*walk.MainWindow, error) { var mw *walk.MainWindow

     return mw, MainWindow{
     	AssignTo: &mw,
     	Title:    "My Cool App",
     	MinSize:  Size{400, 300},
     	Layout:   VBox{},
     	Children: []Widget{
     		PushButton{
     			Text:      "Don't Click Me!",
     			OnClicked: func() { panic("Ouch!") },
     		},
     	},
     }.Create(nil)
    

    }

This requires much less error handling and the hierarchical structure of the GUI is reflected in the code.

  1. Qt Designer and ui2walk ==========================

The ui2walk tool generates Go code for use with Walk from Qt Designer ui files.

It generates .go files for every .ui file in the current working directory, recursively.

If you e.g. have a file 'mydialog.ui', ui2walk will create 'mydialog_ui.go' in the same directory. This file will get regenerated every time you run ui2walk, so don't edit it.

If it doesn't already exist, ui2walk also creates a matching "logic" file 'mydialog.go', which will not be regenerated, so you can extend it:

package main

import "github.com/lxn/walk"

type MyDialog struct {
	*walk.Dialog
	ui myDialogUI
}

func RunMyDialog(owner walk.RootWidget) (int, error) {
	dlg := new(MyDialog)
	if err := dlg.init(owner); err != nil {
		return 0, err
	}

	// TODO: Do further required setup, e.g. for event handling, here.

	return dlg.Run(), nil
}

ui2walk emits i18n-ed strings when using the -tr flag. See https://github.com/lxn/polyglot for more details.

About

A Windows GUI toolkit for the Go Programming Language

Resources

License

Stars

Watchers

Forks

Packages

No packages published