中文 | English
跨平台的Golang GUI库, 核心绑定自 Lazarus 创建的通用跨平台GUI库 liblcl 。
GoVCL是一个原生GUI库,不是基于HTML,更不是DirectUI库,一切以实用为主。
中文全称:Go语言可视化组件库
;英文全称:Go Language Visual Component Library
govcl最低要求go1.9.2。
Windows | Linux | macOS
如果你想要支持linux arm及linux 32bit则需要自己编译对应的liblcl二进制。
使用方法: 安装方法
注:用Lazarus设计界面,用Golang写代码。
go get -u github.com/ying32/govcl
注:也可用go module方式拉取,在go.mod中配置如:github.com/ying32/govcl v2.2.0+incompatible
。
package main
import (
// 如果你使用自定义的syso文件则不要引用此包
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl"
)
type TMainForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
type TAboutForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
var (
mainForm *TMainForm
aboutForm *TAboutForm
)
func main() {
vcl.Application.Initialize()
vcl.Application.SetMainFormOnTaskBar(true)
vcl.Application.CreateForm(&mainForm)
vcl.Application.CreateForm(&aboutForm)
vcl.Application.Run()
}
// -- TMainForm
func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
}
func (f *TMainForm) OnBtn1Click(sender vcl.IObject) {
aboutForm.Show()
}
// -- TAboutForm
func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
}
func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
vcl.ShowMessage("Hello!")
}
方法一需要配合res2go工具使用。
package main
import (
// 如果你使用自定义的syso文件则不要引用此包
_ "github.com/ying32/govcl/pkgs/winappres"
"github.com/ying32/govcl/vcl"
)
type TMainForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
type TAboutForm struct {
*vcl.TForm
Btn1 *vcl.TButton
}
var (
mainForm *TMainForm
aboutForm *TAboutForm
)
func main() {
vcl.RunApp(&mainForm, &aboutForm)
}
// -- TMainForm
func (f *TMainForm) OnFormCreate(sender vcl.IObject) {
f.SetCaption("MainForm")
f.Btn1 = vcl.NewButton(f)
f.Btn1.SetParent(f)
f.Btn1.SetBounds(10, 10, 88, 28)
f.Btn1.SetCaption("Button1")
f.Btn1.SetOnClick(f.OnBtn1Click)
}
func (f *TMainForm) OnBtn1Click(sender vcl.IObject) {
aboutForm.Show()
}
// -- TAboutForm
func (f *TAboutForm) OnFormCreate(sender vcl.IObject) {
f.SetCaption("About")
f.Btn1 = vcl.NewButton(f)
//f.Btn1.SetName("Btn1")
f.Btn1.SetParent(f)
f.Btn1.SetBounds(10, 10, 88, 28)
f.Btn1.SetCaption("Button1")
f.Btn1.SetOnClick(f.OnBtn1Click)
}
func (f *TAboutForm) OnBtn1Click(sender vcl.IObject) {
vcl.ShowMessage("Hello!")
}
Windows: 根据编译的二进制是32还是64位的,复制对应的liblcl.dll
到当前可执行文件目录或系统环境路径下。
GOARCH = amd64 386
GOOS = windows
CGO_ENABLED=0
Linux: 复制liblcl.so
当前可执行文件目录下(也可复制liblcl.so到/usr/lib/
(32bit liblcl)或者/usr/lib/x86_64-linux-gnu/
(64bit liblcl)目录中,作为公共库使用)。
GOARCH = amd64
GOOS = linux
CGO_ENABLED=1
MacOS: 复制liblcl.dylib
当前可执行文件目录下(MacOS下注意:需要自行创建info.plist文件),或者参考:MacOS上应用打包
GOARCH = amd64
GOOS = darwin
CGO_ENABLED=1
注:这里的当前可执行文件目录
指的是你当前编译的项目生成的可执行文件位置。
特别注意:所有UI组件都是非线程/协程安全的,当在goroutine中使用时,请使用vcl.ThreadSync来同步更新到UI上。
特别注意2:如果你使用go>=1.15编译Windows可执行文件,则必须则必须使用-buildmode=exe
编译选项,不然会有错误。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
代码活跃度
社区活跃度
团队健康
流行趋势
影响力
:与代码提交频次相关
:与项目和用户的issue、pr互动相关
:与团队成员人数和稳定度相关
:与项目近期受关注度相关
:与项目的star、下载量等社交指标相关