代码之家  ›  专栏  ›  技术社区  ›  haha wa

使用Fyne时,在窗口中设置线条的位置不起作用

  •  1
  • haha wa  · 技术社区  · 5 月前

    我正在使用画布在窗口上绘制一条线,在第一次绘制之前更改其位置,但它不起作用。以下是代码:

    package main
    
    import (
        "fyne.io/fyne/v2"
        "fyne.io/fyne/v2/app"
        "fyne.io/fyne/v2/canvas"
        "image/color"
    )
    
    func main() {
        myApp := app.New()
        w := myApp.NewWindow("Line")
    
        line := canvas.NewLine(color.White)
        line.StrokeWidth = 3
    
        //line.Position1 = fyne.NewPos(10, 10) // Equally ineffective
        //line.Position2 = fyne.NewPos(100, 100) // Equally ineffective
    
        line.Move(fyne.NewPos(10, 10))
        line.Resize(fyne.NewSize(100, 100))
    
        w.SetContent(line)
        w.Resize(fyne.NewSize(300, 300))
    
        w.ShowAndRun()
    }
    

    预期的结果应该是这样的:

    enter image description here

    但在实践中,该职位仍然是默认职位:

    enter image description here

    但是,使用goroutine进行延迟修改时没有问题:

    package main
    
    import (
        "fyne.io/fyne/v2"
        "fyne.io/fyne/v2/app"
        "fyne.io/fyne/v2/canvas"
        "image/color"
        "time"
    )
    
    func main() {
        myApp := app.New()
        w := myApp.NewWindow("Line")
    
        line := canvas.NewLine(color.White)
        line.StrokeWidth = 3
    
        w.SetContent(line)
        w.Resize(fyne.NewSize(300, 300))
    
        go func() {
            time.Sleep(time.Second * 3) // After 3 seconds, the line successfully changed from the default position to the specified position
            line.Move(fyne.NewPos(10, 10))
            line.Resize(fyne.NewSize(100, 100))
        }()
    
        w.ShowAndRun()
    }
    

    enter image description here

    我不知道这是Fyne的bug还是我使用它的方式。 我的目标是在第一次绘制窗口时在指定位置绘制线条。

    注意:我使用Windows和go1.22

    //对不起我的英语。

    0 回复  |  直到 5 月前
        1
  •  0
  •   andy.xyz    5 月前

    窗口顶部的项目将始终被告知填充它,就像Stack容器的内容一样。

    要手动移动项目,您应该将它们放在一个没有布局的容器中( container.NewWithoutLayout ). 任何其他排列都将为您进行布局(默认情况下,一条线从空间的左上角绘制到右下角)。

    通过使用goroutine,你似乎在偷偷溜过窗口布局,但下次刷新或调整大小时,线条会恢复到全尺寸。