法恩初学者在这里。
\n我正在尝试解决一个简单的用例,但没有在文档中找到任何解决方案:在 Fyne 中,如何拥有一个 Table 小部件,并将其数据绑定到数据源?
\n换句话说,我们binding.BindStringList 在文档中有,它允许绑定字符串列表\xe2\x80\xa6
data := binding.BindStringList(\n &[]string{"Item 1", "Item 2", "Item 3"},\n)\nRun Code Online (Sandbox Code Playgroud)\n\xe2\x80\xa6我正在寻找类似的东西,它允许绑定结构列表而不是字符串。例如,待办事项表:
\ntype Todo struct {\n UserID int `json:"userId,omitempty"`\n ID int `json:"id,omitempty"`\n Title string `json:"title,omitempty"`\n Completed bool `json:"completed,omitempty"`\n}\nRun Code Online (Sandbox Code Playgroud)\n如果不可能,对您来说最好的解决方法是什么?
\n好吧,按照安迪的建议,我尝试了这个:
\nvar data []Todo\n\nstringData := `[{"userId":1,"id":1,"title":"delectus aut autem"},{"userId":1,"id":2,"title":"quis ut nam facilis et officia qui"}]`\njson.Unmarshal([]byte(stringData), &data)\n\nvar bindings []binding.DataMap\n\nfor _, todo := range data {\n bindings = append(bindings, binding.BindStruct(&todo))\n}\n\nlist := widget.NewTable(\n func() (int, …Run Code Online (Sandbox Code Playgroud) 我正在尝试以下演示代码fyne:
package main
import (
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
w := a.NewWindow("Hello")
w.SetContent(
widget.NewVBox(
widget.NewLabel("Hello Fyne!"),
widget.NewButton("Quit", func(){a.Quit()} ),
),
)
w.ShowAndRun()
}
Run Code Online (Sandbox Code Playgroud)
它运行正常,但我想将标签的颜色更改为蓝色,将按钮的颜色更改为绿色。我看到有,theme但这似乎是针对整个应用程序而不是针对单个元素。
如何将不同的颜色应用于不同的 GUI 组件?感谢您的帮助。
我正在开发 GUI 应用程序,需要动态添加和删除 gui 元素,我想知道是否有办法从 golang fyne 容器中删除元素。在下面的示例代码中,我创建了容器并动态添加元素,现在我希望能够删除这些元素而不是隐藏它们。(我尝试的一个“解决方案”是创建新容器,填充它并重置窗口内容,但它闪烁,我不喜欢它)。
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
"image/color"
"strconv"
"time"
)
type Input struct {
Id string
ThumbUrl string
}
func (input Input) GetContainer() *fyne.Container {
thumbImg := canvas.NewText("There", color.White)
group := widget.NewGroup(input.Id, thumbImg)
ret := fyne.NewContainerWithLayout(layout.NewVBoxLayout(), group)
return ret
}
type Segment struct {
Id string
Inputs []Input
InputsColumn *fyne.Container
}
func (seg *Segment) GetSegment() fyne.CanvasObject {
first := true
var inputsColumn *fyne.Container
for _, in := range seg.Inputs …Run Code Online (Sandbox Code Playgroud) 戈兰代码:
package main
import (
"fyne.io/fyne/app"
"fyne.io/fyne/widget"
)
func main() {
application := app.New()
window = application.NewWindow("Hello rohan")
window.SetContent(widget.NewLabel("Hello again"))
window.ShowAndRun()
}
Run Code Online (Sandbox Code Playgroud)
当执行此代码时,我收到以下错误。
# pkg-config --cflags -- gl gl
Package gl was not found in the pkg-config search path.
Perhaps you should add the directory containing `gl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gl' found
Package gl was not found in the pkg-config search path.
Perhaps you should add the directory containing `gl.pc'
to the PKG_CONFIG_PATH environment variable
No …Run Code Online (Sandbox Code Playgroud) 下面是我使用工具包实现的 UI 的示例应用程序代码fyne,但无法弄清楚如何将按钮向左对齐、使顶部文本更大并添加颜色。
我尝试创建一个自定义主题来实现我需要的 UI 功能,但我对工具包的 godocfyne缺乏理解。有没有人可以指点我来完成这项工作?或为我提供一些指示,因为该工具包的文档记录很少
这是我的示例应用程序代码
package main
import (
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/layout"
"fyne.io/fyne/theme"
"fyne.io/fyne/widget"
)
func main() {
a := app.New()
a.Settings().SetTheme(theme.LightTheme())
w := a.NewWindow("myapp")
w.Resize(fyne.NewSize(340, 600))
w.SetContent(widget.NewVBox(
widget.NewLabelWithStyle("myApp version1", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}),
widget.NewLabelWithStyle("Welcome to \n myAPp", fyne.TextAlignLeading, fyne.TextStyle{Bold: true}),
layout.NewSpacer(),
widget.NewButton("Register", func() {
a.Quit()
}),
widget.NewButton("Login", func() {
a.Quit()
}),
))
w.ShowAndRun()
}
Run Code Online (Sandbox Code Playgroud) 下面的代码创建了一个新的应用程序窗口来显示本地文件系统中的图片,如何添加支持来检测“按键”事件并退出应用程序?
package main
import (
"flag"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/widget"
)
func main() {
flag.Parse()
a := app.New()
w := a.NewWindow("Image Viewer")
img := canvas.NewImageFromFile("/home/mh-cbon/Images/7.png")
img.FillMode = canvas.ImageFillContain
scroll := widget.NewScrollContainer(img)
scroll.Resize(fyne.NewSize(400, 400))
w.SetContent(scroll)
w.Resize(fyne.NewSize(400, 400))
w.Show()
a.Run()
}
Run Code Online (Sandbox Code Playgroud) 我用的是法因。我正在开发一款游戏(显然带有按钮)。我想知道是否有办法改变按钮的背景?我知道有一个带有图像而不是文本的按钮,但我只想更改按钮的背景颜色。
我正在尝试按照简单的代码使用Fyne包创建 GUI :
// from: https://github.com/fyne-io/fyne
package main
import (
"fyne.io/fyne/widget"
"fyne.io/fyne/app"
)
func main() {
app := app.New()
w := app.NewWindow("Hello")
w.SetContent(widget.NewVBox(
widget.NewLabel("Hello Fyne!"),
widget.NewButton("Quit", func() {
app.Quit()
}),
))
w.ShowAndRun()
}
Run Code Online (Sandbox Code Playgroud)
它编译并构建可执行文件,没有任何错误,甚至没有警告,但在尝试运行时会出现以下错误:
I:\>rnfynetest
2019/08/25 12:37:18 Fyne error: failed to initialise OpenGL
2019/08/25 12:37:18 Cause: glBeginConditionalRender
2019/08/25 12:37:18 At: C:/Users/ABCD/go/src/fyne.io/fyne/internal/driver/gl/window.go:1007
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x2c pc=0x572afd]
goroutine 1 [running, locked to thread]:
fyne.io/fyne/internal/driver/gl.(*window).SetContent(0x0, 0x8fc5e0, 0x1386e0c0)
C:/Users/ABCD/go/src/fyne.io/fyne/internal/driver/gl/window.go:361 +0x1d
main.main()
I:/rnfynetest.go:10 …Run Code Online (Sandbox Code Playgroud) 我正在为 Go 和 Fyne 苦苦挣扎,对这两种语言都不熟悉,也太习惯 C++、Python 和其他面向对象的语言。我正在尝试为许多不同类型的 Fyne 小部件注入某些常见行为,但我迷路了。例如,我需要在许多小部件上创建变体,例如 Label 和 Button,以允许我捕捉右键单击 (TapSecondary),以便我可以做一些特别的事情(通常,弹出一个菜单)。是的,我想要按钮和标签之类的弹出菜单;我什至想在输入框上拦截它(即使我必须以这种方式自己实现粘贴。)
我在网上找到了一个示例,该示例提供此示例以允许我拦截对标签的点击:
type TapLabel struct {
*widget.Label //composition
//function pointers to set to get events
OnTapped func() //`json:"-"`
OnTappedSecondary func() //`json:"-"` (what are these for anyway?)
}
func NewTapLabelWithStyle(text string, alignment fyne.TextAlign, style fyne.TextStyle,
tappedLeft func(), tappedRight func()) *TapLabel {
return &TapLabel{
widget.NewLabelWithStyle(text, alignment, style),
tappedLeft, tappedRight,
}
}
//somehow this catches right click. How?
func (mc *TapLabel) TappedSecondary(pe *fyne.PointEvent) {
if mc.OnTappedSecondary != nil {
mc.OnTappedSecondary()
} …Run Code Online (Sandbox Code Playgroud) 我想向我用 Go 编写的命令行应用程序添加一个 GUI,但我遇到了 fyne 和循环依赖项的问题。
考虑这个简单的例子来说明我面临的问题:假设一个按钮触发了我的模型类上的一个耗时的方法(比如获取数据等),并且我希望视图在任务完成时更新。
我首先实现了一个非常幼稚且完全不解耦的解决方案,这显然会遇到 go 编译器引发的循环依赖错误。考虑以下代码:
主程序
package main
import (
"my-gui/gui"
)
func main() {
gui.Init()
}
Run Code Online (Sandbox Code Playgroud)
图形用户界面/gui.go
package gui
import (
"my-gui/model"
//[...] fyne imports
)
var counterLabel *widget.Label
func Init() {
myApp := app.New()
myWindow := myApp.NewWindow("Test")
counterLabel = widget.NewLabel("0")
counterButton := widget.NewButton("Increment", func() {
go model.DoTimeConsumingStuff()
})
content := container.NewVBox(counterLabel, counterButton)
myWindow.SetContent(content)
myWindow.ShowAndRun()
}
func UpdateCounterLabel(value int) {
if counterLabel != nil {
counterLabel.SetText(strconv.Itoa(value))
}
}
Run Code Online (Sandbox Code Playgroud)
模型/model.go
package model
import (
"my-gui/gui" …Run Code Online (Sandbox Code Playgroud) 我想使用文件对话框来选择一个目录以便在Go中进一步使用。为了选择目录,我使用 Fyne 文件对话框,因为应用程序的其余部分也使用 Fyne。我设法创建了一个简单的测试应用程序:
package main
import (
"fmt"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/dialog"
"fyne.io/fyne/v2/widget"
)
var save_dir string = "NoPathYet!"
func chooseDirectory(w fyne.Window) string {
dialog.ShowFolderOpen(func(dir fyne.ListableURI, err error) {
if err != nil {
dialog.ShowError(err, w)
return
}
if dir != nil {
fmt.Println(dir.Path())
save_dir = dir.Path() // here value of save_dir shall be updated!
}
fmt.Println(save_dir)
}, w)
return save_dir
}
func main() {
a := app.New()
w := a.NewWindow("FileDialogTest")
hello := widget.NewLabel("Hello Fyne!")
w.SetContent(container.NewVBox(
hello, …Run Code Online (Sandbox Code Playgroud)