Golang使用Fyne创建菜单时遇到cannot use fileMenuItem1 as string value错误

Golang使用Fyne创建菜单时遇到cannot use fileMenuItem1 as string value错误 以下是我用于测试 Fyne 的代码。

package userinterface

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

func Uirender() {
	myApp := app.New()
	myWindow := myApp.NewWindow("Hello World")

	// 创建菜单项
	fileMenuItem1 := fyne.NewMenuItem("File 1", nil)

	// 创建一个菜单并将菜单项添加到其中
	fileMenu := fyne.NewMenu(
		fileMenuItem1,
	)

	// 创建一个菜单栏并将菜单设置到其中
	mainMenu := fyne.NewMainMenu(
		fileMenu,
	)

	// 将菜单栏设置为窗口的主菜单
	myWindow.SetMainMenu(mainMenu)

	// 为窗口创建简单的内容
	content := container.NewVBox(
		widget.NewLabel("Hello World!"),
	)

	// 设置窗口的内容
	myWindow.SetContent(content)

	// 显示窗口并运行应用程序
	myWindow.ShowAndRun()
}

以下是错误信息。

cannot use fileMenuItem1 (variable of type *fyne.MenuItem) as string value in argument to fyne.NewMenu

我在谷歌上没怎么看到关于 Fyne 的这个错误,所以我想在这里问一下。


更多关于Golang使用Fyne创建菜单时遇到cannot use fileMenuItem1 as string value错误的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang使用Fyne创建菜单时遇到cannot use fileMenuItem1 as string value错误的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


错误原因是fyne.NewMenu的第一个参数应该是菜单名称(字符串),而不是*fyne.MenuItem。菜单项应该通过Items字段添加。

以下是修正后的代码:

package userinterface

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

func Uirender() {
    myApp := app.New()
    myWindow := myApp.NewWindow("Hello World")

    // 创建菜单项
    fileMenuItem1 := fyne.NewMenuItem("File 1", nil)

    // 创建菜单,第一个参数是菜单名称,第二个参数是菜单项切片
    fileMenu := fyne.NewMenu(
        "File",  // 菜单名称
        fileMenuItem1,
    )

    // 创建主菜单
    mainMenu := fyne.NewMainMenu(
        fileMenu,
    )

    // 将菜单栏设置为窗口的主菜单
    myWindow.SetMainMenu(mainMenu)

    // 为窗口创建简单的内容
    content := container.NewVBox(
        widget.NewLabel("Hello World!"),
    )

    // 设置窗口的内容
    myWindow.SetContent(content)

    // 显示窗口并运行应用程序
    myWindow.ShowAndRun()
}

关键修改:

  1. fyne.NewMenu的第一个参数必须是字符串类型的菜单名称
  2. 后续参数才是菜单项(*fyne.MenuItem
  3. 如果需要添加多个菜单项,可以这样写:
fileMenu := fyne.NewMenu(
    "File",
    fyne.NewMenuItem("New", nil),
    fyne.NewMenuItem("Open", nil),
    fyne.NewMenuItemSeparator(),
    fyne.NewMenuItem("Exit", func() {
        myApp.Quit()
    }),
)

这样就能正确创建菜单结构了。

回到顶部