Pull to refresh

Comments 58

На маке в первую очередь надо поставить pkg-config и gtk, иначе go get ошибками плюётся.
brew install pkg-config gtk-mac-integration gtk+3
Судя по голосованию придётся писать дальше. :)
Если сталкивались, особенно интересует подключение собственных виджетов из сишных библиотек и работа с TreeView (как с ListStore, так и с TreeStore), в частности с итераторами. А в идеале и создание собственных виджетов на Golang.

Хочется перевести проект с Си на Golang, но пока непонятно будет ли оно стоить. А дома времени на эксперименты почти нет.
С TreeView и ListStore работал, с итераторами. Думаю расскажу. Собственные виджеты не делал. Это был мой первый опыт с GTK+. :)
Нет. Я написал приложение на nw.js (https://github.com/jhekasoft/insteadman2), понял, что такие технологии, в которых нужня тянуть Chromium и node.js меня не устраивают вообще. И поэтому переписал приложение на Go + gotk3 (https://github.com/jhekasoft/insteadman3).
А что не устроило в Chromium и node.js? Пробовали TypeScript вместо JavaScript? На JavaScript я бы тоже стал писать что-то сложнее одноразовых простых скриптов.
На JavaScript я бы тоже НЕ стал писать что-то сложнее одноразовых простых скриптов.
Не устроило то, что они много весят. Ну и ресурсы системы едять порядочно. Компромиссом может быть github.com/zserge/webview. Это нативный вебвью.

Но надо отметить, что Visual Studio Code сделан как раз на Electron с TypeScript. И по сравнению с IntelliJ Idea весит гораздо меньше, да и память не так сильно жрёр. Это говорит о том, что Electron может быть лучше растолстевшего JVM.
У меня есть проект на Electron + TypeScript. По началу в WebStorm все бегало (причем эта штука полегче Idea будет). Но с ростом проекта стало местами дико тормазить, в то время как в Visual Studio Code все шустро бегает на этом же проекте. Так что дело не в технологиях, а в техническом дизайне решения и его реализации.

Стереотип медленности Chromium и node.js (Electron + TypeScript) полагаю вызван существующим мнением что большая часть веб разработчиков все еще являются скрипт кидди.
+1
Кроме того тащить в десктопный проект js и веб c их жуткой экосистемой имхо мазохизм
В свое время (года 2 назад) тоже хотел написать декстопное приложение на Go, но биндинги gtk и qt в то время были мягко говоря не «очень» рабочие. И после продолжительных поисков я остановился на биндинге sciter оказалось очень даже ничего, правда с оформлением и внутренними скриптами время я потратил изрядно.
Для себя я сделал вывод что-то что сложенее 2-3 окон (например переключение между ними, диалоги, прогресс бары) на Go сделать довольно-таки сложно.
Всё, что можно сделать с помощью GTK+, можно сделать и на Go. А на GTK+ есть довольно-таки сложные GUI-приложения. Если чего-то нет в биндинге gotk3 для GTK+, то всегда можно добавить. Я делал такое приложение: jhekasoft.github.io/insteadman. Это ланчер для INSTEAD-игр Там ещё окно настроек есть. Возможно не сильно сложное приложение, но я не вижу приград для усложнения.
Сейчас GTK имеет более свежую версию, чем поддерживается gotk3 (3.6-3.16), например у меня — 3.18 и так просто, как в статье скомпилировать сам gotk3 и приложение не получится, используем:
для установки:
go install -tags gtk_3_18 github.com/gotk3/gotk3/gtk
для сборки приложения:
go build -v -tags gtk_3_18 -gcflags "-N -l"

Это есть в issue проекта
В Homebrew версия 3.22.30: formulae.brew.sh/formula/gtk+3. На ArchLinux тоже версия 3.22.30: www.archlinux.org/packages/extra/x86_64/gtk3. Поэтому у меня проблем не было.

Теги в gotk3 сделаны специально для старых версий.

То есть у вас устаревшая версия установлена. Какая у вас операционная система?
Linux Mint 18.3, как бы не очень и старая она.
Тем не менее 3.22 уже как 3 месяца релизнули. Но gotk3 поддерживает версии выше 3.16. У меня свободно компилится.

Там у них для разных версий есть отдельные файлы, в которых только фичи тех версий. Возможно просто что-то напутали в gotk3 с этими версиями и поправят.
UFO just landed and posted this here
Долгое время сидел на KDE, если нужно быстро что-то написать для себя, был достаточно удобный инструмент QtCreator.
Сейчас перешёл на Mate и не увидел удобного визуального инструмента под GTK.
Есть Anjuta, но толком ни документации, ни примеров.
В итоге написал себе нужную программу на Python, но хочется, конечно, что-то нормально компилируемое.
С GO ни разу не сталкивался, но синтаксис вроде простой и понятный, надо будет пощупать.
Жаль что под линукс нет простого и понятного инструмента, типа Visual Studio.
Есть Visual Studio Code, Есть IntelliJ Idea.
Visual Studio Code это же, вроде как просто редактор кода.
Мне-то хочется с визуальным конструктором UI и всё такое.
Ну, так для этого Glade, либо для Qt есть QtCreator. Там всё как вы хотите.

IntelliJ Goland, берите EAP и сможете попробовать язык в деле и в более удобной IDE, чем альтернативы.

Ну и Lite IDE не плох, с IntelliJ Goland не сравнить, конечно. Но достаточно быстр и удобен.

Уважаемый автор, просьба дополни свою статья информацией о том что нужно будет иметь на компьютере пользователя чтобы пользоваться подобным приложением.


К примеру я разработчик, я загадил установил на свой мак home brew (на самом деле пользуюсь mac port именно чтобы не отчищать ...), поставил GTK и все что нужно для компиляции.
Сделал приложение и хочу его отдать пользователю(ям), пользователей не заставить ставить всякое не нужное им, чтобы такое приложение работало.
Поэтому опиши что нужно запаковать, как куда или ставить на пользовательский комп чтобы приложение работало на другом компьютере, исходя из того что пользовательский компьютер свеж и чист. Так как go кроссплатформенный, то для всех платформ.


Одно из прекрасных преимуществ приложений на go в том что они компилируются в статический бинарник не требующий ничего. В этом случае так же? Или нужно тащить с собой GTK?
Я помню был биндиг под Golang для QT, в том случае приходилось тащить тележку навоза в виде самого QT.


Если нужно тащить GTK, то зачем такое счастье? Например под mac вполне себе то же самое можно написать на swift, который очень похож на язык Golang и получить полноценное приложение без зависимостей. Или написать UI на атом или подобном, а внутрь встроить Golang приложение как внутренний сервер.


В чем преимущества описанного решения?

Про GTK не скажу, но Swift, как бы Вам не казалось, вместе с приложением бандлит весь Swift stdlib.


И так будет до тех пор, пока не разберутся с Swift ABI, а это хотели сначала к 3 версии сделать, потом к 4, сейчас к 5.

На GNU/Linux библиотеки будут в системе, на macOS — тащаться с собой нужные библиотеки в бандле (как и во всех других приложениях), под Windows — нужные библиотеки идут в папке с программой. Их вес не сильно велик для современных реалий. Уж точно меньше всяких Электронов. Я об этом рассказу в продолжении.

Вот в документации gotk3 про это: github.com/gotk3/gotk3/wiki/Cross-Compiling#deployment.
Ну и если написать на Мак под Свифт, то приложение будет только для Мака. Не кроссплатформенное.

Под атомом вы имеете ввиду Electron? Я писал, что с ним тащится Chromium + node.js. Это не очень. Плюс ресурсов жрёт много.
Спасибо за статью!
Вот только недавно искал что взять для GUI в Go. Склонялся к Qt, т.к. с ним я знаком со времен разработки на PyQt, но отталкивала монструозность установки всего этого и дальнейшей компиляция.
И вам спасибо! Я дальше расскажу, что плохого в GTK+.
Файл main.glade как то упаковывается в бинарник? Или при компиляции разворачивается в код который создаст описанные в файле объекты?
При компиляции создается автономный бинарник или для его работы пользователю придется еще что то доставлять?
main.glade можно при желании упаковать в бинарник. Но он задуман всё-таки как отдельный файл представления, которое можно поменять не перекомпилируя приложение. При компиляции его парсит GtkBuilder и динамически создаёт объекты.

Нужны будут динамические библиотеки GTK+, их общий вес не сильно велик по нынещним меркам: github.com/gotk3/gotk3/wiki/Cross-Compiling#deployment. Я дальше об этом расскажу.
В общем я думал, что всё будет просто. И что зря про Go говорят, что в нём проблема с GUI. Но как же я ошибался...
из статьи не понятно, причем от слова совсем, в чем же таки заключались проблемы и как их решали?!
На данном этапе всё кажется простым и не вызывает трудностей. Но трудности у меня появились при кросскомпиляции


Дальше я написал. В общем об этом в продолжении. :)
Ваш пример на этой либе:

image

package main

import (
	"github.com/andlabs/ui"
)

func main() {
	err := ui.Main(func() {
		input := ui.NewEntry()
		button := ui.NewButton("Greet")
		greeting := ui.NewLabel("")
		box := ui.NewVerticalBox()
		box.Append(ui.NewLabel("Enter your name:"), false)
		box.Append(input, false)
		box.Append(button, false)
		box.Append(greeting, false)
		window := ui.NewWindow("Hello", 200, 100, false)
		window.SetMargined(true)
		window.SetChild(box)
		button.OnClicked(func(*ui.Button) {
			greeting.SetText("Hello, " + input.Text() + "!")
		})
		window.OnClosing(func(*ui.Window) bool {
			ui.Quit()
			return true
		})
		window.Show()
	})
	if err != nil {
		panic(err)
	}
}


отсюда: getting started
Рассматривал. Там даже нет списков, treeview. Не серьёзная вещь пока что. Так, демку можно сделать, но полноценное приложение на нём не получится. По крайней мере то, которое я задумывал.
да, забыл, сори, когда смотрел пару лет назад таблицы были тоже зародыше
Когда делал для пет-проекта GUI на Go то выбрал вот эту библиотеку github.com/andlabs/ui все довольно таки удобно, разве что с марта месяца не обновлялась. Вот такое получилось

image

image
Да, выше писали о ней уже. Я о ней знаю. Но там нет таблиц. Мне нужны были таблицы. Посложнее интерфейс в приложении:
image
Здрасте Вам и спасибо за материал. Тоже в активном поиске годного гуя на голанге, так что для меня это всё весьма актуально. В настоящий момент использую нативный гуй и Го приложения в качестве бекенда, связывая одно с другим через event loop с очередью сообщений на сокетах, но хочется же всё делать на Го. Под шиндовз очень понравилась lxn/walk — чудесная обёртка для winapi, к сожалению там нет многих нужных контролов
Это были лирические впечатления, а теперь вопросик. Это всё гуглится наверное, но всё же спрошу — есть ли у в gotk3 графики, грид-контрол и richtext-контрол?
Грид-контроль — это GtkTreeView. К нему есть биндинг в gotk3. Выше я показывал скриншот с приложением, которое делал. Там он есть. Там можно очень много чего накастомизировать.

Richtext-контрол — есть GtkTextView, тоже есть биндинг в gotk3 и пример. Там много возможностей по форматированию. Единственное, что придётся самому все контролы добавлять для этого и написать какой-то код для фоматирования текста.

А вот с графиками не всё так просто. Можно вручную всё рисовать с помощью Cairo, которая идёт с GTK и вроде бы есть биндинги в gotk3. Либо же использовать кастомный виджет (один из: gtkgraph.sourceforge.net/screenshots.html). Но для этого виджета скорее всего не будет биндинга для Go. Поэтому придётся самому биндинг писать. Если же вручную рисовать, то есть пример работы с графикой на gotk3.
Большое спасибо за подробный ответ
Кто то смог все Это проделать на Windows?
Консоль
Andrii@ANDRII-PC MINGW64 /d/Projects/GoGUI
$ go run main.go
go build github.com/gotk3/gotk3/gdk: invalid flag in pkg-config --libs: -Wl,-luuid

Andrii@ANDRII-PC MINGW64 /d/Projects/GoGUI
$ CGO_CFLAGS_ALLOW="-Wl,-luuid" go run main.go
go build github.com/gotk3/gotk3/gdk: invalid flag in pkg-config --libs: -Wl,-luuid

Ищите файлы mingw64\lib\pkgconfig\gdk-3.0.pc (mingw32\lib\pkgconfig\gdk-3.0.pc) и в строке:


Libs: -L${libdir} -lgdk-3  -lgdi32 -limm32 -lshell32 -lole32 -Wl,-luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz

просто удаляете "-Wl,", чтобы получилось:


Libs: -L${libdir} -lgdk-3  -lgdi32 -limm32 -lshell32 -lole32 -luuid -lwinmm -ldwmapi -lsetupapi -lcfgmgr32 -lz
Глянул это чудо техники, оно оказывается под виндой ТРЕБУЕТ MinGW-w64. То есть под 32-разрядной осью не работает. В связи с этим возникают обоснованные сомнения в реальной кросплатформенности, а следовательно и нужности такой либы

Работает. Я на Windows компилировать 32-битное приложение. Вот тут его можете скачать: https://jhekasoft.github.io/insteadman/. Расскажу в продолжении подробнее.

Мне вот интересно, много ли в 2k18 32х разрядных осей/процов?

Смотря какой у вас бизнес. В унитарных предприятиях и фин. учреждениях, где каждую копейку экономят, поверьте, достаточно много
А мне интересно, почему люди пишут вместо 2018 – 2k18. Они действительно думают что что то сократили?

более того, они иногда пишут 2к18 (и тут даже увеличили кол-во байт).


но если серьезно, то это то же самое что "ну это такое", "тащемта", "сейчас бы в 2018 делать что-то" — мерзкая грязь в языке.

Ну тащемта это все используется в "разговорном" русском языке, помимо этого в нем используется куча других не литературных слов, в т.ч. и маты. Грязь это или нет — судить не буду. Энивей, все это используется для общения в неформальном стиле, а хабр все же для неформального общения.
Если же говорить про чистоту языка… Ну, я могу начать разговор про использование "кавычек" вместо «ёлочек» которые используются в русском языке… :)
Никто не идеален. Каждый пишет/говорит так как ему удобно или как он привык.
Надеюсь что ответил и walkman7

я говорил о словах/фразах-паразитах — не разговорной речи.

Лично я писал код на других операционных системах, а кросскомпиляцию для Windows делал в Arch Linux, о чём надеюсь скоро напишу.

Очень любопытна эта часть. Писал несколько прилаг с UI на GTK+ 3 и все компилил под Linux. Через какое-то время понадобились эти же приложения на Windows. Сколько я не бился, какие настроики не крутил, мне так и не удалось скомпилировать сие чудо под Windows. Пришлось потом в скором порядке переписывать на go-astilectron
Если кратко, то кросскомпиляцию я делал по этой инструкции: github.com/gotk3/gotk3/wiki/Cross-Compiling#from-linux-for-windows-64-bit. То есть компилил под Windows в GNU/Linux с помощью mingw-компилятор (для Си-кода GTK+3).

Я компилировал как раз в той ОС, для которой есть описание установки mingw — ArchLinux. mingw и GTK-библиотеки под это компилятор собирались с исходников. Это очень длительный процесс, как там и описано. У меня примерно сутки всё компилилось. Я уже думал, где можно найти готовые бинарники. Но после того как скомпилились все либы компилить само приложение для Windows стало просто.

Я задумываюсь, что если мне придётся заново собирать mingw-библиотеки для GTK+, то это будет кошмар. Я даже задумывался, что может быть под самой Windows компиляция будет проще.

А вы не пробовали под Windows скомпилить по официальной инструкции: www.gtk.org/download/windows.php?
Пробовал по этим инструкциям тоже. С начала из под Linux для Windows. Позже поставил Windows и пробовал скомпилить на прямую. На самом деле ошибок было куча. Исправляешь одну, вылазит ещё две. Просто не хватило времени, что бы докопаться до проблемы, уже сроки поджимать стали.
Если писать под Linux, то всё супер, буквально 3 команды и всё готово.
А в целом я перебрал практически все UI библиотеки из этого списка: github.com/avelino/awesome-go#gui
И лично для меня, gtk показался наиболее простым в понимании и близким по синтаксису. Да и UI элементов в ней довольно много, по сравнению с остальными аналогами

Расскажу в продолжении подробнее

Ну так что... уже навряд ли будет продолжение?)

Sign up to leave a comment.

Articles

Change theme settings