私の最近の頭を悩ませているのは、GTK3 を使用して Python3 で愚かな小さなアプリを作成することです。ボタンにはフォググレー以外の色を使用します。これを行う方法について、過去数日間グーグルで検索しましたが、これまでに試したことはすべて失敗しました。失敗しただけでなく、静かに失敗し、何が起こっているのかについての手がかりを与えるエラーメッセージは表示されませんでした。
これは私のテストアプリです:
from gi.repository import Gtk, Gdk
class ButtonWindow(Gtk.Window):
def __init__(self):
super().__init__(title="Button Test")
self.set_border_width(10)
hbox = Gtk.Box(spacing=10)
self.add(hbox)
hbox.set_homogeneous(False)
# make the button
button = Gtk.Button('Test Button')
hbox.pack_start(button, True, True, 0)
# try to change its colour ....
# button.modify_base(Gtk.StateType.NORMAL, Gdk.color_parse('green'))
# button.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0, 1, 0, 1))
# button.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0x00ff00))
# button.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse("green"))
# button.modify_bg(Gtk.StateType.ACTIVE, Gdk.color_parse("green"))
# button.modify_bg(Gtk.StateType.SELECTED, Gdk.color_parse("green"))
# attempt to change the style ....
# style = button.get_style().copy()
# style.bg[Gtk.StateType.NORMAL] = Gdk.color_parse('green')
# style.bg[Gtk.StateType.ACTIVE] = Gdk.color_parse('red')
# style.bg[Gtk.StateType.SELECTED] = Gdk.color_parse('blue')
# style.bg[Gtk.StateType.PRELIGHT] = Gdk.color_parse('black')
# button.set_style(style)
# ok, let's try changing the box ....
# hbox.modify_base(Gtk.StateType.NORMAL, Gdk.color_parse('green'))
# hbox.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0,1,0,1))
# hbox.override_background_color(Gtk.StateType.NORMAL, Gdk.RGBA(0x00ff00ff))
# hbox.modify_bg(Gtk.StateType.NORMAL, Gdk.color_parse('green'))
window = ButtonWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
失敗した試みをコメントとして残しておきます。上記のように、アプリケーションに関する限り、上記のバリエーションのいずれもエラー メッセージを生成しないため、機能しているように見えます。しかし、ボタンが古くなった食器の色のままであるため、どれもうまくいかないようです。
参考までに、標準リポジトリからインストールされた python3-gi と python3-gi-cairo を使用して、Ubuntu 12.04 で Python 3.2.3 を使用しています。
誰かが私を正しい方向に向けることができますか?
編集: 以下は、@mike の回答に基づいて作り直された例です。これは機能しますが、いくつかの問題があり、フォローアップの質問で対処される可能性があります。問題は次のとおりです。
background
代わりに Ubuntu で使用しなければならないのはなぜbackground-color
ですか?- フォントのスタイリングを機能させるにはまだいくつかの問題がありますが、少なくとも今は動作する例があります。
- たとえば、テキストやその他の属性に基づいて、さまざまなスタイル/色をさまざまなボタンに適用できますか?
だから、コード: -
from gi.repository import Gtk, Gdk
class ButtonWindow(Gtk.Window):
def __init__(self):
super().__init__(title="Button Test")
self.set_border_width(10)
hbox = Gtk.Box(spacing=10)
self.add(hbox)
hbox.set_homogeneous(False)
# make the button
button = Gtk.Button('Test Button')
hbox.pack_start(button, True, True, 0)
# get the style from the css file and apply it
cssProvider = Gtk.CssProvider()
cssProvider.load_from_path('gtkStyledButtonTest.css')
screen = Gdk.Screen.get_default()
styleContext = Gtk.StyleContext()
styleContext.add_provider_for_screen(screen, cssProvider,
Gtk.STYLE_PROVIDER_PRIORITY_USER)
window = ButtonWindow()
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()
css ファイルは次のようになります。
GtkWindow {
background-color: #0000ff;
}
GtkButton {
color: #ff0000;
background: #00ff00;
}
誰かがこれが役立つことを願っています。