これが再投稿である場合は申し訳ありませんが、答えがどこにも見つかりません。INSENSITIVE に設定された TreeView を持つ Python と GTK+3 でアプリケーションを開発しています。これにより、ユーザーが定数のテーブルで直接選択を行うことができなくなります。ただし、INSENSITIVE GTK+3 ウィジェットのデフォルトの動作は、インセンシティブ オブジェクトをシェーディングすることです。ほとんどの場合、これは良い動作ですが、私の場合は、テーブルを読みやすくする必要があります。
私がやりたいことは、この特定の INSENSITIVE オブジェクトのレンダリングをオーバーライドして、NORMAL オブジェクトのレンダリングと一致させることです。次に、ユーザーが GTK テーマを変更すると、この特定の INSENSITIVE ウィジェットは通常のウィジェットと同じようにレンダリングされます。
私の要点を説明するためにいくつかの簡単なコードを添付しています...
import gi.repository.Gtk as Gtk
import gi.repository.Gdk as Gdk
class Example(Gtk.Window):
def __init__(self):
"""A minimal example of the rendering of a INSENSITIVE widget"""
# Use Gtk.Window __init__ method
Gtk.Window.__init__(self)
# Add a box
self.set_title("Example1")
self.box = Gtk.Box()
self.add( self.box )
# Entry widget
self.entry = Gtk.Entry()
self.entry.set_text("Can't touch this")
self.entry.set_sensitive( False )
self.box.pack_start(self.entry, True, True, 0)
class Example2(Example):
def __init__(self):
"""Forced recoloring of the INSENSITIVE widget. How do I do
this so that it matches the GTK 3+ style for normal text?
"""
# Use Example __init__ method
Example.__init__(self)
self.set_title("Example2")
# Hack the color
self.entry.override_color(
Gtk.StateFlags.INSENSITIVE,
Gdk.RGBA(0,0,0,1)
)
self.entry.override_background_color(
Gtk.StateFlags.INSENSITIVE,
Gdk.RGBA(1,1,1,1)
)
if __name__ == "__main__":
# Example 1
Window1 = Example()
Window1.connect("delete-event", Gtk.main_quit)
Window1.show_all()
# Example 2
Window2 = Example2()
Window2.show_all()
Gtk.main()
ここでは、例 2 のカラーリングを上書きしました。常に GTK テーマと一致するように上書きするにはどうすればよいですか?