Fyne での GUI コンポーネントの色のカスタマイズ
Fyne 開発者として、次のような GUI コンポーネントの外観をカスタマイズしたい場合があります。ラベルやボタンの色の変更。 Fyne はアプリケーション全体の美しさに影響を与えるデフォルトのテーマを提供しますが、現在、個々のコンポーネントの色を調整するためのネイティブ サポートはありません。
提案された解決策: 割り当て可能なスタイル
Fyne リポジトリで提起された問題では、ウィジェットに割り当てられる個別のスタイルの導入が提案されていました。ただし、Fyne チームは、アプリケーションの一貫性を促進し、ユーザー エクスペリエンスへの些細な妥協を防ぐという設計原則を維持しています。
代替アプローチ: カスタム ウィジェット
目的を達成するにはカスタマイズの場合、推奨されるアプローチはカスタム ウィジェットを実装することです。独自のウィジェットを作成すると、その外観を完全に制御でき、希望の色の変更を組み込むことができます。
ボタンのセマンティック スタイル
色の直接カスタマイズは利用できませんが、 Fyne はボタンのセマンティック スタイルを提供します。 「プライマリ」スタイルを割り当てると、テーマのハイライト色が使用され、ボタンの外観に多少のバリエーションを加えることができます。
実装例
<code class="go">type LabeledButton struct { Label *fyne.Container Button *fyne.Container Composited *fyne.CanvasObject } // NewLabeledButton creates a custom widget that combines a label and a button. func NewLabeledButton(label, buttonText string) *LabeledButton { labelWidget := fyne.NewContainer( fyne.NewLabel(label), fyne.NewContainerWithLayout(labelLayout, fyne.NewContainer(fyne.NewSeparator())), ) labelWidget.ExtendBaseWidget(labelWidget) buttonWidget := fyne.NewContainer( fyne.NewButton(buttonText, nil), ) buttonWidget.ExtendBaseWidget(buttonWidget) composited := fyne.NewCanvasObject() composited.SetContent(fyne.NewVBox(labelWidget, buttonWidget)) composited.Resize(labelWidget.MinSize().Add(buttonWidget.MinSize())) return &LabeledButton{ Label: labelWidget, Button: buttonWidget, Composited: composited, } } // MinSize returns the minimum size required by the custom widget. func (l *LabeledButton) MinSize() fyne.Size { return l.Composited.MinSize() } // Layout arranges the children of the custom widget. func (l *LabeledButton) Layout(size fyne.Size) { l.Composited.Resize(size) l.Composited.Layout(size) } // Paint updates the display of the custom widget. func (l *LabeledButton) Paint(w fyne.Window, c fyne.Canvas) { l.Composited.Paint(w, c) // Custom colors can be set here // (e.g., c.SetFillColor(color.NRGBA{R: 0, G: 255, B: 0, A: 255})) }</code>
カスタム ウィジェットを実装することで、 Fyne の設計原則を守りながら、希望の色のカスタマイズを実現できます。
以上がFyne で個々の GUI コンポーネントの色をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。