如何在 Fyne 中将 window 调整为对话框大小

How to resize window to dialog size in Fyne

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


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()
}

这看起来很基本,但我就是找不到任何方法来实现它!我试过布局、容器等,但没有任何区别,window 始终为 0x0。非常感谢您对此提供帮助!

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

由于对话框不是设计为一段时间的主要内容,我想知道将您的内容更改为 window 中是否更合适(因为应用程序中的某些内容时真正使用对话框正在发生,你想打断它)。

例如:

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()
}