Kerangka kerja GUI lintas platform yang cepat untuk Go berdasarkan Imgui yang terhormat dan Imgui-Go yang mengikat Great Go.
Kontribusi apa pun (fitur, widget, tutorial, dokumen, dll ...) sangat dihargai!
(Perpustakaan ini tersedia di bawah lisensi gratis dan permisif, tetapi membutuhkan dukungan keuangan untuk mempertahankan peningkatannya yang berkelanjutan. Selain pemeliharaan dan stabilitas, ada banyak fitur yang diinginkan yang belum ditambahkan. Jika Anda menggunakan GIU, harap pertimbangkan untuk menjangkau.)
Bisnis: Dukungan Pengembangan dan Pemeliharaan Berkelanjutan melalui Dukungan Teknis, Pemeliharaan, Kontrak Mensponsori:
E-mail: [email protected]
Individu: Mendukung pengembangan dan pemeliharaan berkelanjutan di sini.
Untuk dokumentasi, lihat wiki kami, contoh, Godoc, atau lihat saja komentar dalam kode.
GIU dibangun di atas GLFW v3.3, jadi idealnya GIU dapat mendukung semua platform yang didukung GLFW v3.3.
Dibandingkan dengan binding Imgui Golang yang tersayang, GIU memiliki fitur berikut:
package main
import (
"fmt"
g "github.com/AllenDang/giu"
)
func onClickMe () {
fmt . Println ( "Hello world!" )
}
func onImSoCute () {
fmt . Println ( "Im sooooooo cute!!" )
}
func loop () {
g . SingleWindow (). Layout (
g . Label ( "Hello world from giu" ),
g . Row (
g . Button ( "Click Me" ). OnClick ( onClickMe ),
g . Button ( "I'm so cute" ). OnClick ( onImSoCute ),
),
)
}
func main () {
wnd := g . NewMasterWindow ( "Hello world" , 400 , 200 , g . MasterWindowFlagsNotResizable )
wnd . Run ( loop )
}
Inilah hasilnya:
Sistem GUI mode langsung berarti kontrol UI tidak mempertahankan keadaan dan nilainya. Misalnya, memanggil giu.InputText(&str)
akan menampilkan kotak teks input di layar, dan nilai yang dimasukkan pengguna akan disimpan di &str
. Kotak teks input tidak tahu apa -apa tentang itu.
Dan metode loop
dalam contoh Hello World bertanggung jawab untuk menggambar semua widget berdasarkan parameter yang diteruskan ke dalamnya. Metode ini akan dipanggil 30 kali per detik untuk mencerminkan status interaktif (seperti yang diklik, dilayang-layang, berubah nilai, dll.). Ini akan menjadi tempat Anda mendefinisikan struktur UI.
Secara default, widget apa pun yang ditempatkan di dalam Layout
wadah akan ditempatkan secara vertikal.
Untuk membuat deretan widget (yaitu widget tempat satu per satu secara horizontal), gunakan metode Row()
. Misalnya giu.Row(Label(...), Button(...))
akan membuat label di sebelah tombol.
Untuk membuat kolom widget (yaitu widget tempat satu per satu secara vertikal) di dalam satu baris, gunakan metode Column()
.
Widget apa pun yang memiliki metode Size()
, dapat mengatur ukurannya secara eksplisit. Perhatikan bahwa Anda dapat memberikan nilai negatif ke Size()
, yang akan mengisi nilai lebar/tinggi yang tersisa. Misalnya, InputText(...).Size(giu.Auto)
akan membuat kotak teks input dengan lebar terpanjang yang telah ditinggalkan oleh wadahnya.
MasterWindow
berarti jendela asli platform yang diimplementasikan oleh OS. Semua subwindow dan widget akan ditempatkan di dalamnya.
Window
adalah wadah dengan bilah judul, dan dapat diciutkan. SingleWindow
adalah jenis jendela khusus yang akan menempati semua ruang MasterWindow
yang tersedia.
Seorang Child
seperti panel dalam kerangka GUI lainnya - ia dapat memiliki warna latar belakang dan perbatasan.
Periksa examples/widgets
untuk semua jenis widget.
Backend GIU tergantung pada OpenGL 3.3, pastikan lingkungan Anda mendukungnya (sejauh yang saya tahu, beberapa mesin virtual seperti VirtualBox tidak mendukungnya).
xcode-select --install
go get github.com/AllenDang/giu
Pertama, Anda perlu menginstal dependensi yang diperlukan:
sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libglx-dev libgl1-mesa-dev libxxf86vm-dev
pada distribusi berbasis topi merah:
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-devel
Anda mungkin juga perlu menginstal kompiler C/C ++ (seperti G ++) jika belum diinstal. Ikuti petunjuk go compiler.
Kemudian, go build
yang sederhana akan berhasil.
Kompilasi silang sedikit lebih rumit. Katakanlah Anda ingin membangun untuk ARM64. Inilah yang perlu Anda lakukan:
sudo dpkg --add-architecture arm64
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
libx11-dev:arm64 libxcursor-dev:arm64 libxrandr-dev:arm64 libxinerama-dev:arm64 libxi-dev:arm64 libglx-dev:arm64 libgl1-mesa-dev:arm64 libxxf86vm-dev:arm64
GOOS=linux GOARCH=arm64 CGO_ENABLED=1 CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ HOST=aarch64-linux-gnu go build -v
go build -ldflags " -s -w " .
go build -ldflags " -s -w -H=windowsgui -extldflags=-static " .
di Mac:
brew install mingw-w64
di Linux:
sudo dnf install mingw64-gcc mingw64-gcc-c++ mingw64-winpthreads-static
cat > YourExeName.rc << EOL
id ICON "./res/app_win.ico"
GLFW_ICON ICON "./res/app_win.ico"
EOL
x86_64-w64-mingw32-windres YourExeName.rc -O coff -o YourExeName.syso
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ HOST=x86_64-w64-mingw32 go build -ldflags " -s -w -H=windowsgui -extldflags=-static " -p 4 -v -o YourExeName.exe
rm YourExeName.syso
rm YourExeName.rc
Semua jenis permintaan tarik (dokumen, demo, tangkapan layar, kode, dll.) Lebih dari disambut!