我想將一些標準小部件合并到一個自定義小部件中。如果將所有小部件字段放入一個容器中,我就可以做到這一點,如下所示:package mainimport ( "fmt" "fyne.io/fyne" "fyne.io/fyne/app" "fyne.io/fyne/layout" "fyne.io/fyne/widget")type MyWidget struct { widget.BaseWidget Cont *fyne.Container text *widget.Label statusBar *widget.Label b1 *widget.Button b2 *widget.Button count uint}func (t *MyWidget) Init() { t.b1 = widget.NewButton("1", func() { t.text.SetText("1") t.count++ t.statusBar.SetText(fmt.Sprint(t.count)) }) t.b2 = widget.NewButton("2", func() { t.text.SetText("2") }) t.statusBar = widget.NewLabel("status") bottom := fyne.NewContainerWithLayout(layout.NewCenterLayout(), t.statusBar) t.text = widget.NewLabelWithStyle("0", fyne.TextAlignTrailing, fyne.TextStyle{Bold: true}) t.Cont = fyne.NewContainerWithLayout(layout.NewBorderLayout(nil, bottom, nil, nil), bottom, fyne.NewContainerWithLayout( layout.NewGridLayoutWithRows(4), fyne.NewContainerWithLayout(layout.NewCenterLayout(), t.text), layout.NewSpacer(), fyne.NewContainerWithLayout(layout.NewGridLayout(2), t.b1, t.b2), layout.NewSpacer(), ))}func Load() *MyWidget { obj := &MyWidget{BaseWidget: widget.BaseWidget{}} obj.Init() return obj}func main() { f := app.New() w := f.NewWindow("") obj := Load() w.SetContent(obj.Cont) w.ShowAndRun()}我曾經使用 GUI 工具包,其中頂部小部件有機會設置用于容納子小部件的容器。是否可以在不導出內部容器的情況下使用 Fyne 獲得解決方案?
1 回答

慕的地8271018
TA貢獻1796條經驗 獲得超4個贊
我建議您考慮使用容器。(即“fyne.NewContainerWithLayout(myLayout, widgets...)”。
Fyne 中的小部件和容器是不同的。Widget是對邏輯的封裝,通過渲染器來顯示,Container用于對多個Widget進行分組。有一些小部件可以彌補這一差距,例如 widget.Box 和 widget.Group,但它們通常會公開容器,或重新導出容器方法。
通常,您不會創建一個小部件樹,而是創建一個在循環中包含小部件的容器樹。
- 1 回答
- 0 關注
- 153 瀏覽
添加回答
舉報
0/150
提交
取消