2

我正在为 Go 使用 Fyne 包。我要做的就是显示一个对话框,并让窗口自动调整为对话框的最大大小。我已经查看了文档并查看了示例,但我在任何地方都找不到它!窗口始终为 0x0 像素。如果我调整窗口大小,我可以告诉对话框具有最大高度和宽度,但我似乎无法将其反馈回窗口的大小。这是我的代码:


import (
    "fyne.io/fyne"
    "fyne.io/fyne/app"
    "fyne.io/fyne/dialog"
)

var myApp fyne.App

func main() {
    myApp = app.New()
    myWindow := myApp.NewWindow("test")

    cnfm := dialog.NewConfirm("Test Dialog!", "Are you sure you want to interact with this test dialog?", loseCallback, myWindow)

    cnfm.Show()
    cnfm.Resize(cnfm.MaxSize())

    myWindow.Show()
    
    // uncomment to have a window greater than 0x0
    //myWindow.Resize(fyne.NewSize(375, 180))
    myApp.Run()
}

func loseCallback(yes bool) {
    myApp.Quit()
}

这似乎很基本,但我找不到任何方法来实现这一点!我尝试过使用布局、容器等,但没有任何区别,窗口始终为 0x0。我真的很感激这方面的帮助!

4

1 回答 1

1

Fyne 并没有真正的 MaxSize 概念。有 MinSize() (组件永远不应小于),它的 Size() 是屏幕上的当前大小。对话框出现在当前内容上,因此不受内容布局等的限制或扩展。

由于对话框不是设计为一段时间的主要内容,我想知道将您的内容更改为窗口内是否更合适(因为当应用程序中发生某些事情并且您想要中断它时,该对话框真的被使用) .

例如:

import (
    "fyne.io/fyne"
    "fyne.io/fyne/app"
    "fyne.io/fyne/container"
    "fyne.io/fyne/layout"
    "fyne.io/fyne/widget"
)

var myApp fyne.App

func main() {
    myApp = app.New()
    myWindow := myApp.NewWindow("test")

    yes := widget.NewButton("Yes", closeCallback)
    yes.Importance = widget.HighImportance
    myWindow.SetContent(container.NewVBox(
        widget.NewLabel("Are you sure you want to interact with this test dialog?"),
        container.NewHBox(layout.NewSpacer(),
            widget.NewButton("No", closeCallback), yes,
            layout.NewSpacer())))

    myWindow.ShowAndRun()
}

func closeCallback() {
    myApp.Quit()
}
于 2020-11-20T19:47:52.933 回答