2016-07-02 18 views
1

私はPyGTK2アプリを移植しています。GTK3 CSSの背景色を再利用

このアプリは、このようなことが行われます。

 self.normal_color = editor.style.base [Gtk.STATE_NORMAL] 
     self.insensitive_color = editor.style.base [Gtk.STATE_INSENSITIVE] 

をし、その後、それを設定します。

 if editable: self.editor.modify_base (Gtk.STATE_NORMAL, self.normal_color) 
     else:  self.editor.modify_base (Gtk.STATE_NORMAL, self.insensitive_color) 

self.editorGtkTextViewです。 editor.set_sensitive(False)に設定するだけではない理由は、ユーザープログラムがエディタにあり、コードをロードするときにエディタを選択できる必要があり、テキストをグレイアウトする必要がないからです。ここで

は、CSSを使用して、私のポートのMWEです:

import gi 
gi.require_version('Gtk', '3.0') 
gi.require_version('Gdk', '3.0') 
from gi.repository import Gtk, Gdk 

view = Gtk.TextView() 
view.set_name('editable') 
scroll = Gtk.ScrolledWindow() 
scroll.add(view) 

def button_clicked(button): 
    edit = not view.get_editable() 
    view.set_name('editable' if edit else 'readonly') 
    button.set_label('Load' if edit else 'Edit') 
    view.set_editable(edit) 

button = Gtk.Button('Load') 
button.connect('clicked', button_clicked) 

box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 0) 
box.pack_start(scroll, True, True, 0) 
box.pack_start(button, False, True, 0) 

window = Gtk.Window() 
window.set_default_size(300, 300) 
window.add(box) 
window.show_all() 
window.connect('delete_event', Gtk.main_quit) 

css = Gtk.CssProvider() 
css.load_from_path('test.css') 
style = Gtk.StyleContext() 
style.add_provider_for_screen(Gdk.Screen.get_default(), css, 
    Gtk.STYLE_PROVIDER_PRIORITY_USER) 

Gtk.main() 

そして、それぞれのCSSファイル:

#editable { 
    background-color: white; 
    /*background-color: @normal_bg_color;*/ 
} 

#readonly { 
    background-color: @insensitive_bg_color; 
} 

私は動的に背景色を変更するにはCSSの名前を使用し、です。すべてが非難されているので、私はプログラム的に簡単な方法を見つけていません。

私の問題は、どんな理由であれ、奇妙なGtkTextViewでは@normal_bg_colorが白ではないということです。

@*_bg_colorは一般的な色で、ウィジェットに固有のものではありません。または私は間違っていますか?

私はいくつかの@GtkTextView:normal_bg_color ...

view.get_style_context().get_background_color()が廃止されていていたいと思います。ユーザーのテーマカラーを取得する可能性はありますか?

答えて

0

歴史的な理由から、探している色はおそらく@base_colorです。 GTKは、 "基本"色(テキスト入力ウィジェット用)と "背景色"(他のすべてのもの)を常に区別しています。

これはドキュメントではありませんが、例はthis pageです。