2016-07-02 78 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的名字来动态改变背景颜色。我还没有找到一个更简单的编程方式,因为一切似乎都被弃用了。

我的问题是,无论何种原因,@normal_bg_color是不是白色的GtkTextView这是奇怪的。

我想@*_bg_color是通用的颜色,而不是特定于小部件。或者我错了?

我想有一些@GtkTextView:normal_bg_color ...

view.get_style_context().get_background_color()已被弃用。有没有可能获得用户的主题颜色?

回答

0

由于历史原因,您正在寻找的颜色可能是@base_color。 GTK一直在“基本”颜色(用于文本输入小部件)和“背景”颜色(用于其他所有内容)之间进行区分。

这不是完全文档,但示例可在this page上获得。