基于亲爱的Imgui和Great Go Bind Imgui-Go的快速跨平台GUI框架。
对任何贡献(功能,小部件,教程,文档等)都表示赞赏!
(该图书馆可在免费且宽松的许可下获得,但需要经济支持以维持其持续的改进。除了维护和稳定性外,还有许多理想的功能尚待添加。如果您使用的是GIU,请考虑伸出手。)
企业:通过发票的技术支持,维护,赞助合同来支持持续开发和维护:
电子邮件:[email protected]
个人:支持在这里持续的开发和维护。
有关文档,请参阅我们的Wiki,示例,Godoc,或者只是查看代码中的评论。
GIU建立在GLFW v3.3的基础上,因此理想情况下,GIU可以支持GLFW v3.3支持的所有平台。
与其他亲爱的Imgui Golang绑定相比,GIU具有以下特征:
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 )
}
这是结果:
立即模式GUI系统意味着UI控件不能保留其状态和价值。例如,调用giu.InputText(&str)
将在屏幕上显示一个输入文本框,并且用户输入的值将存储在&str
中。输入文本框对此一无所知。
Hello World示例中的loop
方法是根据传递到其中的参数绘制所有小部件的负责人。此方法将每秒调用30次以反映交互式状态(如单击,悬停,价值变化等)。这将是您定义UI结构的地方。
默认情况下,放置在容器Layout
内的任何小部件都将垂直放置。
要创建一排小部件(即一个水平的位置小部件),请使用Row()
方法。例如giu.Row(Label(...), Button(...))
将在按钮旁边创建标签。
要在一排内部创建一个小部件列(即一个垂直放置小部件),请使用Column()
方法。
任何具有Size()
方法的小部件都可以明确设置其尺寸。请注意,您可以将负值传递给Size()
,这将填充剩余的宽度/高度值。例如, InputText(...).Size(giu.Auto)
将创建一个输入文本框,其容器已剩下的最长宽度。
MasterWindow
是指操作系统实现的平台本机窗口。所有子窗口和小部件都将放置在其中。
Window
是带有标题栏的容器,可以折叠。 SingleWindow
是一种特殊的窗口,它将占据MasterWindow
的所有可用空间。
一个Child
就像其他GUI框架中的面板一样 - 它可以具有背景色和边框。
检查各种小部件的examples/widgets
。
GIU的后端取决于OpenGL 3.3,请确保您的环境支持它(据我所知,某些虚拟机(例如VirtualBox)不支持它)。
xcode-select --install
go get github.com/AllenDang/giu
首先,您需要安装所需的依赖项:
sudo apt install libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libglx-dev libgl1-mesa-dev libxxf86vm-dev
关于基于红色帽子的分布:
sudo dnf install libX11-devel libXcursor-devel libXrandr-devel libXinerama-devel libXi-devel libGL-devel libXxf86vm-devel
如果尚未安装,您也可能需要安装C/C ++编译器(例如G ++)。跟随GO编译器提示。
然后,一个简单的go build
将起作用。
交叉编译更为复杂。假设您想为ARM64构建。这就是您需要做的:
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 " .
在Mac上:
brew install mingw-w64
在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
欢迎各种拉动请求(文档,演示,屏幕截图,代码等)!