Canvas和Canvas画布对象
在Fyne中,画布是绘制应用程序的区域。每个窗口都有一个画布,您可以使用window.canvas()访问它,但通常您会在window上找到避免访问画布的函数。
可以在Fyne中绘制的一切都是CanvasObject的一种类型。这里的示例打开一个新窗口,然后通过设置窗口画布的内容来显示不同类型的基本图形元素。有许多方法可以定制每种类型的对象,如文本和圆圈示例所示。
除了使用Canvas.SetContent()更改显示的内容外,还可以更改当前可见的内容。例如,如果更改矩形的FillColour,则可以使用rect.refresh()请求刷新现有组件。
go
package main
import (
"image/color"
"time"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Canvas")
myCanvas := myWindow.Canvas()
blue := color.NRGBA{R: 0, G: 0, B: 180, A: 255}
rect := canvas.NewRectangle(blue)
myCanvas.SetContent(rect)
go func() {
time.Sleep(time.Second)
green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
rect.FillColor = green
rect.Refresh()
}()
myWindow.Resize(fyne.NewSize(100, 100))
myWindow.ShowAndRun()
}
我们可以用相同的方式绘制许多不同的绘图元素,例如圆和文本。
go
func setContentToText(c fyne.Canvas) {
green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
text := canvas.NewText("Text", green)
text.TextStyle.Bold = true
c.SetContent(text)
}
func setContentToCircle(c fyne.Canvas) {
red := color.NRGBA{R: 0xff, G: 0x33, B: 0x33, A: 0xff}
circle := canvas.NewCircle(color.White)
circle.StrokeWidth = 4
circle.StrokeColor = red
c.SetContent(circle)
}
组件
fyne.Widget是一种特殊类型的画布对象,具有与之相关联的交互元素。在Widget中,逻辑与其外观(也称为WidgetRenderer)不同。
小部件也是CanvasObject的类型,因此我们可以将窗口的内容设置为单个小部件。看看我们如何创建一个新的widget.Entry,并在本例中将其设置为窗口的内容。
go
package main
import (
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/widget"
)
func main() {
myApp := app.New()
myWindow := myApp.NewWindow("Widget")
myWindow.SetContent(widget.NewEntry())
myWindow.ShowAndRun()
}