I have 4 PyGObject applications I'm updating from older PyGObject versions to PyGObject 3.38.
Three of those applications went pretty smoothly. The fourth, hcm (https://stromberg.dnsalias.org/~strombrg/hcm/) is more troublesome. The application works, but I'm getting a DeprecationWarning I'd like to eliminate.
The warning looks like:
$ ./hcm.py --gui
./hcm.py:1035: DeprecationWarning: Gtk.Widget.modify_fg is deprecated
gui_stuff.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse(color))
The code that is giving that warning currently looks like:
def color_traversal(gui_stuff, color):
"""Traverse a widget hierarchy, changing colors as we go."""
# I'm thinking the stack requirements won't actually be that hefty, at least as
# long as we're talking about a hierarchy and not a proper graph ^_^
if hasattr(gui_stuff, 'get_children'):
for child in gui_stuff.get_children():
color_traversal(child, color)
if hasattr(gui_stuff, 'modify_fg'):
# modify_fg is deprecated
gui_stuff.modify_fg(Gtk.StateType.NORMAL, Gdk.color_parse(color))
# if hasattr(gui_stuff, 'override_color'):
# override_color is deprecated too
# rgba = Gdk.RGBA()
# rgba.parse(color)
# gui_stuff.override_color(Gtk.StateType.NORMAL, rgba)
# if hasattr(gui_stuff, 'set_rgba'):
# This doesn't appear to work; none of the widgets I'm traversing have a set_rgba method
# gdk_color = Gdk.color_parse(color)
# rgba = Gdk.RGBA(gdk_color.red, gdk_color.green, gdk_color.blue, 1.0)
# gui_stuff.set_rgba(rgba)
# Maybe try get_style_context() ?
# Maybe try CSS: https://shallowsky.com/blog/programming/styling-gtk3-with-css-python.html
"gui_stuff" is just a box or button or something. The color_traversal function just recursively traverses the widget and its component widgets changing their foreground color to something the caller specifies.
I have a lot of Python experience, but next to no CSS experience. Is CSS the only way of doing such things now? I must say, learning a new language to set the color of some widgets seems a bit much to ask compared to a function call.
Here's a quick picture of what I want it to look like: 
I've searched for how to do this for hours, but only found either deprecated functions or incomplete descriptions of CSS methods.
Thanks!
from How to set a subset of widgets' colors in PyGObject 3.38?
No comments:
Post a Comment