【发布时间】:2016-07-06 12:57:39
【问题描述】:
我正在移植一个 PyGTK2 应用程序。
这个应用程序做这样的事情:
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.editor 是一个GtkTextView。它不只是将其设置为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() 已被弃用。有没有可能获取用户的主题颜色?
【问题讨论】: