0

これは私の前の質問と同じ問題ですが、基本的なプロパティの設定に css を使用できるように python3/gtk3 に移動しました。

Pythonファイルから:

self.w = Gtk.Window()
self.w.set_name("App")

CSSを使用できます:

#App GtkTreeView row:selected {
    border-color: #000000;
    border-top-width: 1px;
    border-bottom-width: 1px;
    color: #000;
}

また、選択範囲のスタイルを簡単に永久に変更できます。row私にとって、これは、オブジェクトとそのスタイルに動的にアクセスできる必要があることを意味しbgますGtk.StateFlags.SELECTED

私はたくさんの奇妙な方法をbg_color試しGdk.ColorましLabelTreeView

        style=self.treeview.get_style_context()
        col = style.get_background_color(Gtk.StateFlags.SELECTED)
        col.alpha =  1.0
        col.blue = bg_color.blue
        col.red = bg_color.red
        col.green = bg_color.green

または:

        style = self.treeview.get_style().copy()
        style.bg[Gtk.StateFlags.SELECTED] = bg_color
        self.treeview.set_style(style)

(エラーが発生します: style.bg[Gtk.StateFlags.SELECTED] = bg_color IndexError: list assignment index out of range)

など...

行の通常の色に応じて選択効果を動的に変更する方法を見つけるにはどうすればよいですか? 言い換えれば、選択範囲のスタイル設定を実際に保持しているオブジェクトにたどり着くにはどうすればよいでしょうか?

4

1 に答える 1

2

投稿後に実際に機能するようになる方法について、最後のアイデアが1つありました。

css を動的にリロードする:

css に行を追加して、背景の値を動的置換に開放したままにしました。

#App GtkTreeView row:selected {
    border-color: #400;
    border-top-width: 2px;
    border-bottom-width: 2px;
    background: {0};
    color: #000;
}

次に、CSS を Python にロードしました。

    screen = Gdk.Screen.get_default()
    self._css_provider = Gtk.CssProvider()
    css = open("notify_stack.css", 'rb')
    self._css = css.read()
    css.close()
    self._css_from = bytes("{0}".encode("utf8"))
    self._css_provider.load_from_data(self._css.replace(
        self._css_from,   
        bytes("#fff".encode("utf8"))))
    context = Gtk.StyleContext()
    context.add_provider_for_screen(screen, self._css_provider,
        Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

後で行が選択されたときのコールバックで、この行を配置します ( datais my ListStore):

        self._css_provider.load_from_data(
            self._css.replace(self._css_from,
                bytes(data[rows[0]][self.BG_COLOR].encode("utf8"))))

もっといい方法があるはずですが、実際にはうまくいきました。

于 2012-11-02T00:22:17.060 に答える