Tengo una GUI GTK3 llamada por un código Python 3 simple. El icono se encuentra en el directorio /usr/share/icons/hicolor/scalable/actions/ . El color de mi tema actual es oscuro y los íconos se ven blancos. Cuando cambio a blanco, los íconos de la GUI del tema del sistema se vuelven negros. Pero en mi icono de código se ve negro en lugar de blanco cuando el tema oscuro está activado.
Funciona cuando elijo el nombre del icono ( icon-symbolic ) del programa Glade y guardo el archivo de la interfaz de usuario. El archivo de icono es un simple archivo .svg cuadrado negro (dibujado en Inkscape).
¿Cuál es la solución para eso?
OS: Debian-like Linux, Python 3, GTK 3.24Código Python simple:
import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GdkPixbuf builder = Gtk.Builder() builder.add_from_file('test.ui') window1 = builder.get_object('window1') button1 = builder.get_object('button1') class Signals: def on_window1_destroy(self, widget): Gtk.main_quit() builder.connect_signals(Signals()) window1.set_icon_name("icon-symbolic") window1.show_all() Gtk.main()Archivo de interfaz de usuario simple:
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.38.2 --> <interface> <requires lib="gtk+" version="3.20"/> <object class="GtkWindow" id="window1"> <property name="can-focus">False</property> <property name="default-width">300</property> <property name="default-height">300</property> <child> <!-- n-columns=1 n-rows=1 --> <object class="GtkGrid"> <property name="visible">True</property> <property name="can-focus">False</property> <child> <object class="GtkButton" id="button1"> <property name="label" translatable="yes">Button 1</property> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> </object> <packing> <property name="left-attach">0</property> <property name="top-attach">0</property> </packing> </child> </object> </child> </object> </interface>Encontré una solución para cambiar automáticamente el color del icono en la barra de título de la ventana. Gtk.HeaderBar en lugar de la barra de título de la ventana predeterminada y agregué una Gtk.Image (su nombre es image_headerbar ) a la izquierda de la barra de encabezado. Finalmente, configuré el ícono de la imagen usando el siguiente código y funcionó:
image_headerbar.set_from_icon_name("icon-symbolic", -1)
El color del ícono cambia a oscuro/blanco automáticamente cuando el tema del sistema cambia a blanco/oscuro.
He probado varios métodos para cambiar dinámicamente el color del icono en la barra de título de la ventana. Pero ninguno de ellos funcionó si no se usa Gtk.HeaderBar .
Pero la altura de la barra de título de la ventana es un poco más grande que las barras de título de ventana predeterminadas cuando se usa Gtk.HeaderBar (probado en el entorno de escritorio XFCE).