什么是设置一个条目的背景色并将其恢复为默认颜色的最佳方法?
我的脚本现在可以工作,但我非常确定这不是最好的方法。另外,我仍然有两个问题:
1. 如果我插入一个不包含字符串“red”或“green”的文本并选择此文本,则无法看到我的选择,因为它全部是白色的。 2. 我认为有比我将
我的脚本现在可以工作,但我非常确定这不是最好的方法。另外,我仍然有两个问题:
1. 如果我插入一个不包含字符串“red”或“green”的文本并选择此文本,则无法看到我的选择,因为它全部是白色的。 2. 我认为有比我将
self.entry_default_background_color_str
插入CSS文本更好的方法。import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Gdk
class Window(Gtk.Window):
def __init__(self):
self.screen = Gdk.Screen.get_default()
self.gtk_provider = Gtk.CssProvider()
self.gtk_context = Gtk.StyleContext()
self.gtk_context.add_provider_for_screen(self.screen, self.gtk_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
Gtk.Window.__init__(self, title="Check Input")
self.set_size_request(300, 80)
self.mainbox = Gtk.VBox()
self.add(self.mainbox)
# entry
self.name_entry = Gtk.Entry()
self.name_entry.set_name("name_entry")
self.mainbox.pack_start(self.name_entry, True, True, 0)
self.name_entry.connect("changed", self.check_input)
entry_context = self.name_entry.get_style_context()
self.entry_default_background_color = entry_context.get_background_color(Gtk.StateType.NORMAL)
self.entry_default_background_color_str = self.entry_default_background_color.to_string()
self.show_all()
def check_input(self, _widget=None):
if "red" in self.name_entry.get_text():
self.gtk_provider.load_from_data('#name_entry { background: red; }')
elif "green" in self.name_entry.get_text():
self.gtk_provider.load_from_data('#name_entry { background: green; }')
else:
self.gtk_provider.load_from_data('#name_entry { background: ' + self.entry_default_background_color_str + '; }')
def main():
window = Window()
Gtk.main()
if __name__ == "__main__":
main()
self.name_entry
而不是监听器传递的小部件。虽然这对于只有一个Entry
可能有效,但对于多个Entry
则不行,因此请使用由监听器传递的那个小部件,否则可能会将样式应用到错误的Entry
上。 - B8vrede