Fyne错误:尝试在未启动应用程序时访问当前的Fyne应用程序。

huangapple go评论184阅读模式
英文:

Fyne error: Attempt to access current Fyne app when none is started

问题

我一直在努力找出导致这个错误的原因...可能只是我自己的问题,但也许你可以看出我看不到的地方。希望你能给我帮助。

每当我运行我的代码时,就会出现以下错误:

Fyne error: 尝试访问当前未启动的 Fyne 应用

go/pkg/mod/fyne.io/fyne/v2@v2.2.3/app.go:92

有什么想法吗?这是代码。而且它可以运行*。

  1. // GoMark 项目 main.go
  2. // 版本 1.3
  3. package main
  4. import (
  5. "fmt"
  6. "image/color"
  7. "log"
  8. "os"
  9. "runtime"
  10. "fyne.io/fyne/v2"
  11. "fyne.io/fyne/v2/app"
  12. "fyne.io/fyne/v2/canvas"
  13. "fyne.io/fyne/v2/container"
  14. "fyne.io/fyne/v2/dialog"
  15. "fyne.io/fyne/v2/theme"
  16. "fyne.io/fyne/v2/widget"
  17. )
  18. var text = widget.NewMultiLineEntry() // 文本输入框
  19. var textTitle = widget.NewLabel("")
  20. var preview = widget.NewRichTextFromMarkdown("") // 预览区域
  21. var myWindow fyne.Window
  22. var down_dir = ""
  23. var filePath = "" // 这部分不会编辑预设!请往下看...
  24. var savename = ""
  25. var savenametxt = ""
  26. var myApp = app.New()
  27. func main() {
  28. myWindow = myApp.NewWindow("GoMark 1.3")
  29. // - - - 文本编辑器 / 预览 - - -
  30. textTitle.SetText("未保存的文档")
  31. left := container.NewBorder(nil, nil, nil, nil, text)
  32. middle := container.NewHSplit(left, preview)
  33. text.OnChanged = func(string) { // 当文本输入框中有内容被写入或更改时,使用此函数更新预览区域
  34. preview.ParseMarkdown(text.Text)
  35. }
  36. // - - - 结束 - - -
  37. // - - - 顶部部分 - - -
  38. // 创建线条
  39. line := canvas.NewLine(color.Black)
  40. line.StrokeWidth = 4
  41. savename := widget.NewEntry()
  42. savename.SetPlaceHolder("ABC123")
  43. //- - - 设置工具栏 - - -
  44. settings := widget.NewToolbar(
  45. widget.NewToolbarAction(theme.ContentClearIcon(), func() {
  46. dialog.ShowConfirm("是否清空文档?", "", callback, myWindow)
  47. }),
  48. widget.NewToolbarSeparator(),
  49. widget.NewToolbarAction(theme.FolderNewIcon(), func() {
  50. log.Println("另存为文档")
  51. dialog.ShowFileSave(DownloadDirectory, myWindow)
  52. }),
  53. widget.NewToolbarAction(theme.DocumentSaveIcon(), func() {
  54. log.Println("保存文档")
  55. form_savename := widget.NewFormItem("", savename)
  56. form := dialog.NewForm("保存名称到 S:", "保存", "取消", []*widget.FormItem{form_savename}, func(b bool) {
  57. if b == true {
  58. fmt.Println("选择保存")
  59. savenametxt = savename.Text
  60. SaveToS(myWindow)
  61. savename.SetText(savenametxt)
  62. }
  63. }, myWindow)
  64. form.Resize(fyne.NewSize(400, 200))
  65. form.Show()
  66. }),
  67. )
  68. // 组合
  69. top := container.NewBorder(nil, line, nil, settings, textTitle)
  70. // - - - 结束 - - -
  71. // 运行主要的 fyne 窗口
  72. main := container.NewBorder(top, nil, nil, nil, middle)
  73. myWindow.Resize(fyne.NewSize(1200, 800))
  74. myWindow.SetContent(main)
  75. myWindow.ShowAndRun()
  76. }
  77. // 清空文本确认
  78. func callback(yes bool) {
  79. fmt.Println("运行回调函数")
  80. if yes == true {
  81. fmt.Println("清空文本")
  82. clean()
  83. } else {
  84. fmt.Println("文本保留")
  85. }
  86. }
  87. // 清空文本框和预览区域
  88. func clean() {
  89. text.Text = ""
  90. preview.ParseMarkdown(text.Text)
  91. text.Refresh()
  92. textTitle.Text = "未保存的文档"
  93. textTitle.Refresh()
  94. dialog.ShowInformation("文本已清空", "", myWindow)
  95. }
  96. // 选择下载文件夹
  97. func DownloadDirectory(savedir fyne.URIWriteCloser, err error) {
  98. fmt.Println("对话框")
  99. fmt.Println(savedir.URI())
  100. }
  101. //- - - 保存到 S: - - -
  102. func SaveToS(myWindow fyne.Window) {
  103. if runtime.GOOS == "Windows" {
  104. filePath = "S:\\TMP\\DocMove" // 编辑 Windows 的预设目录
  105. filePath = filePath + "\\"
  106. } else {
  107. filePath = "/mnt/s/TMP/DocMove" // 编辑 Linux 的预设目录
  108. filePath = filePath + "/"
  109. }
  110. fmt.Println(runtime.GOOS)
  111. file, errC := os.Create(filePath + savenametxt + ".md")
  112. if errC != nil {
  113. dialog.ShowError(errC, myWindow)
  114. fmt.Println(errC)
  115. return
  116. } else {
  117. _, errWriting := file.Write([]byte(text.Text))
  118. if errWriting != nil {
  119. dialog.ShowError(errWriting, myWindow)
  120. fmt.Println(errWriting)
  121. return
  122. } else {
  123. textTitle.SetText(savenametxt)
  124. dialog.ShowInformation("成功", savenametxt+" 已保存", myWindow)
  125. fmt.Println(filePath + savenametxt + ".md")
  126. }
  127. }
  128. }
英文:

I've been trying to figure out what is causing this error... Might just be me, but maybe you can see what i can't. Hopefully you can give me a helping hand.

Whenever I run my code it gives this error

> Fyne error: Attempt to access current Fyne app when none is started
>
> go/pkg/mod/fyne.io/fyne/v2@v2.2.3/app.go:92

Any idea? Here is the code. and It runs*

  1. // GoMark project main.go
  2. // Version 1.3
  3. package main
  4. import (
  5. "fmt"
  6. "image/color"
  7. "log"
  8. "os"
  9. "runtime"
  10. "fyne.io/fyne/v2"
  11. "fyne.io/fyne/v2/app"
  12. "fyne.io/fyne/v2/canvas"
  13. "fyne.io/fyne/v2/container"
  14. "fyne.io/fyne/v2/dialog"
  15. "fyne.io/fyne/v2/theme"
  16. "fyne.io/fyne/v2/widget"
  17. )
  18. var text = widget.NewMultiLineEntry() //Text entry
  19. var textTitle = widget.NewLabel("")
  20. var preview = widget.NewRichTextFromMarkdown("") //Preview side
  21. var myWindow fyne.Window
  22. var down_dir = ""
  23. var filePath = "" // THIS WILL NOT EDIT PRESET!!! Look further down...
  24. var savename = ""
  25. var savenametxt = ""
  26. var myApp = app.New()
  27. func main() {
  28. myWindow = myApp.NewWindow("GoMark 1.3")
  29. // - - - Text editor / Preview - - -
  30. textTitle.SetText("UNSAVED DOCUMENT")
  31. left := container.NewBorder(nil, nil, nil, nil, text)
  32. middle := container.NewHSplit(left, preview)
  33. text.OnChanged = func(string) { //When someting is written or canged in the text entry, update with this function
  34. preview.ParseMarkdown(text.Text)
  35. }
  36. // - - - END - - -
  37. // - - - TOP SECTION - - -
  38. //Line creation
  39. line := canvas.NewLine(color.Black)
  40. line.StrokeWidth = 4
  41. savename := widget.NewEntry()
  42. savename.SetPlaceHolder("ABC123")
  43. //- - - Settings toolbar - - -
  44. settings := widget.NewToolbar(
  45. widget.NewToolbarAction(theme.ContentClearIcon(), func() {
  46. dialog.ShowConfirm("Do you want to clear document?", "", callback, myWindow)
  47. }),
  48. widget.NewToolbarSeparator(),
  49. widget.NewToolbarAction(theme.FolderNewIcon(), func() {
  50. log.Println("Save as Doc")
  51. dialog.ShowFileSave(DownloadDirectory, myWindow)
  52. }),
  53. widget.NewToolbarAction(theme.DocumentSaveIcon(), func() {
  54. log.Println("Save Doc")
  55. form_savename := widget.NewFormItem("", savename)
  56. form := dialog.NewForm("Save Name to S:", "Save", "Cancel", []*widget.FormItem{form_savename}, func(b bool) {
  57. if b == true {
  58. fmt.Println("Save selected")
  59. savenametxt = savename.Text
  60. SaveToS(myWindow)
  61. savename.SetText(savenametxt)
  62. }
  63. }, myWindow)
  64. form.Resize(fyne.NewSize(400, 200))
  65. form.Show()
  66. }),
  67. )
  68. //Combiner
  69. top := container.NewBorder(nil, line, nil, settings, textTitle)
  70. // - - - END - - -
  71. //Run the main fyne window
  72. main := container.NewBorder(top, nil, nil, nil, middle)
  73. myWindow.Resize(fyne.NewSize(1200, 800))
  74. myWindow.SetContent(main)
  75. myWindow.ShowAndRun()
  76. }
  77. //Clear text confirmation
  78. func callback(yes bool) {
  79. fmt.Println("Running Callback")
  80. if yes == true {
  81. fmt.Println("Text CLEAR")
  82. clean()
  83. } else {
  84. fmt.Println("Text STAY")
  85. }
  86. }
  87. //Clear text box and preview
  88. func clean() {
  89. text.Text = ""
  90. preview.ParseMarkdown(text.Text)
  91. text.Refresh()
  92. textTitle.Text = "UNSAVED DOCUMENT"
  93. textTitle.Refresh()
  94. dialog.ShowInformation("Text has been cleared", "", myWindow)
  95. }
  96. //Choose a Download folder
  97. func DownloadDirectory(savedir fyne.URIWriteCloser, err error) {
  98. fmt.Println("Dialog")
  99. fmt.Println(savedir.URI())
  100. }
  101. //- - - Save to S: - - -
  102. func SaveToS(myWindow fyne.Window) {
  103. if runtime.GOOS == "Windows" {
  104. filePath = "S:\\TMP\\DocMove" //EDIT DIR PRESET FOR WINDOWS
  105. filePath = filePath + "\\"
  106. } else {
  107. filePath = "/mnt/s/TMP/DocMove" // EDIT DIR PRESET FOR LINUX
  108. filePath = filePath + "/"
  109. }
  110. fmt.Println(runtime.GOOS)
  111. file, errC := os.Create(filePath + savenametxt + ".md")
  112. if errC != nil {
  113. dialog.ShowError(errC, myWindow)
  114. fmt.Println(errC)
  115. return
  116. } else {
  117. _, errWriting := file.Write([]byte(text.Text))
  118. if errWriting != nil {
  119. dialog.ShowError(errWriting, myWindow)
  120. fmt.Println(errWriting)
  121. return
  122. } else {
  123. textTitle.SetText(savenametxt)
  124. dialog.ShowInformation("Sucess", savenametxt+" Has been saved", myWindow)
  125. fmt.Println(filePath + savenametxt + ".md")
  126. }
  127. }
  128. }

答案1

得分: 1

你正在尝试在初始化fyne应用程序之前创建小部件。

这个命令没有给我任何错误:

  1. var down_dir = ""
  2. var filePath = "" // 这不会编辑预设!请往下看...
  3. var savename = ""
  4. var savenametxt = ""
  5. var myApp = app.New()
  6. var text = widget.NewMultiLineEntry() // 文本输入
  7. var textTitle = widget.NewLabel("")
  8. var preview = widget.NewRichTextFromMarkdown("") // 预览侧边栏
  9. var myWindow fyne.Window
英文:

You are trying to create widgets before the fyne app is initiated.

This order gave me no errors:

  1. var down_dir = ""
  2. var filePath = "" // THIS WILL NOT EDIT PRESET!!! Look further down...
  3. var savename = ""
  4. var savenametxt = ""
  5. var myApp = app.New()
  6. var text = widget.NewMultiLineEntry() //Text entry
  7. var textTitle = widget.NewLabel("")
  8. var preview = widget.NewRichTextFromMarkdown("") //Preview side
  9. var myWindow fyne.Window

huangapple
  • 本文由 发表于 2022年9月5日 16:17:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/73606435.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定