7

GObject イントロスペクションの導入により、メソッドを介してテーマの色にアクセスするwidget.get_style()方法はなくなりました。GTK+ を GOBject イントロスペクションで使用する場合にテーマの色を取得する方法に興味があります。解決策は両方のバージョン (2 と 3) で機能することが望ましいですが、これらのそれぞれに対する解決策も許容されます。

4

1 に答える 1

6

純粋な gtk+-2.0 環境を使用しない限り、gtk+-2.0 から取得する方法がわかりません。その場合、古い GtkStyle メソッドが機能すると思います。たとえば、gnome-shell のような Gtk-3.0 環境を実行していないとします。

import gi
# make sure you use gtk+-2.0
gi.require_version('Gtk', '2.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style = window.get_style()
print style.lookup_color('fg_color')

gtk+-2.0 環境でも動作するはずです。システムが gnome-shell を実行しているため、よくわかりません。これを簡単に試すことはできません。

ただし、このメソッドは推奨されておらず、GtkStyleContext に置き換えられています。上記のコードを gnome-shell のような gtk+-3.0 環境で使用すると実行されますが、必要な情報が得られません。私が得るものは

(False, <Gdk.Color(red=0, green=0, blue=0)>)

編集:これを振り返ってみると、上記はまだ正しい情報を提供していると思います。タプル結果の最初のエントリが False であることからわかるように、fg_color の色が見つかりません。また、色を検出するには、ウィンドウが表示されている必要があります。

色情報が必要な場合は、新しい GtkStyleContext を使用します。たとえば、

import gi
# make sure you use gtk+-3.0
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

window = Gtk.Window()

...

style_context = window.get_style_context()
print style_context.lookup_color('fg_color')

これにより、タプルの最初のエントリがTrueであるため、「fg_color」が見つかったことを示す実際のデータが得られます。

(True, <Gdk.Color(red=0.000000, green=0.000000, blue=0.000000, alpha=1.000000)>)

これがあなたの質問に答えることを願っています。

于 2011-07-17T03:13:19.197 に答える