Fyne. Как изменить контент?
Есть одно окно, в котором при загрузке отображается картинка а, при нажатии на кнопку должна поменяться на картинку b. Но не меняется.
package main
import (
"fmt"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
application := app.New()
window := application.NewWindow("win")
image := canvas.NewImageFromFile("a.png")
image.FillMode = canvas.ImageFillOriginal
go canvas.Refresh(image)
button := widget.NewButton("button", func() {
fmt.Println("xxx")
image = canvas.NewImageFromFile("b.png")
image.FillMode = canvas.ImageFillOriginal
})
content := fyne.NewContainerWithLayout(layout.NewVBoxLayout(), image, button)
window.SetContent(content)
window.ShowAndRun()
}
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
не нужно менять текущий контейнер. Нет методов для ее изменения, вы можете только создать контейнеры, управлять их видимостью, после перерисовать экран.
я немного переделал ваше приложение, чтобы оно делало то, что вы хотите.
package main
import (
"fmt"
"fyne.io/fyne"
"fyne.io/fyne/app"
"fyne.io/fyne/canvas"
"fyne.io/fyne/layout"
"fyne.io/fyne/widget"
)
func main() {
application := app.New()
window := application.NewWindow("win")
imageA := canvas.NewImageFromFile("a.png")
imageA.FillMode = canvas.ImageFillOriginal
imageB := canvas.NewImageFromFile("b.png")
imageB.FillMode = canvas.ImageFillOriginal
var contentA *fyne.Container
var contentB *fyne.Container
buttonA := widget.NewButton("change to B", func() {
fmt.Println("xxx")
window.SetContent(contentB)
window.Show()
})
buttonB := widget.NewButton("change to A", func() {
fmt.Println("yyy")
window.SetContent(contentA)
window.Show()
})
contentA = fyne.NewContainerWithLayout(layout.NewVBoxLayout(), imageA, buttonA)
contentB = fyne.NewContainerWithLayout(layout.NewVBoxLayout(), imageB, buttonB)
window.SetContent(contentA)
window.ShowAndRun()
}