對不起,如果這是轉發,我無法在任何地方找到答案。我正在Python和GTK + 3中開發一個應用程序,它有一個被設置爲INSENSITIVE的TreeView。這禁止我們的用戶在常量表上直接選擇。但INSENSITIVE GTK + 3小部件的默認行爲是遮蔽不敏感對象。在大多數情況下,這是一個很好的行爲,但在我的情況下,我需要我的桌子保持清晰易讀。GTK + 3:如何渲染INSENSITIVE窗口小部件的風格爲NORMAL窗口部件
我想要做的是能夠重寫此特定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主題相匹配的方式覆蓋它?
由於CSS沒有「背景顏色」,只有背景圖像,因此實際上不推薦使用GTK的新版本。 – ebassi