2

これが再投稿である場合は申し訳ありませんが、答えがどこにも見つかりません。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 テーマと一致するように上書きするにはどうすればよいですか?

4

2 に答える 2

1

ウィジェットのスタイルプロパティには、任意のウィジェットのメソッドを呼び出すことで取得できるGtkStyleContextからアクセスできます。コンテキストのインスタンスを使用すると、対応するGtkStateFlagget_style_contextを使用してさまざまなスタイルのプロパティにアクセスできます。

NORMALウィジェットがオンの状態のときにウィジェットの背景色を取得する方法の例を次に示します。

from gi.repository import Gtk

def get_background_color(widget):
    context = widget.get_style_context()
    color = context.get_background_color(Gtk.StateFlags.NORMAL)

    return color # the result is a GdkRGBA instance

INSENSITIVE状態のスタイルを完全に上書きするために何をすべきか完全にはわかりませんが、 GtkStyleProviderを使用する必要があると思います。

于 2013-01-07T23:48:48.253 に答える
0

treeview.props.reorderable = Falseすべてのセル レンダラー モードを に設定して設定するなど、別のアプローチを試してみませんINERTか?

于 2013-01-08T09:28:04.007 に答える