GTK - Python Window 符号图标颜色问题
GTK - Python Window Symbolic Icon Color Problem
我有一个 GTK3
GUI 由一个简单的 Python 3 代码调用。图标位于 /usr/share/icons/hicolor/scalable/actions/
目录中。我当前的主题颜色是深色,图标看起来是白色的。当我切换到白色系统主题时,GUI 图标变成黑色。但是在我的代码中,当激活深色主题时,图标看起来是黑色而不是白色。
当我从 Glade 程序中选择图标名称 (icon-symbolic
) 并保存 UI 文件时它起作用了。图标文件是一个简单的黑色方形 .svg 文件(在 Inkscape 中绘制)。
解决方案是什么?
OS: Debian-like Linux, Python 3, GTK 3.24
简单Python代码:
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()
简单UI文件:
<?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>
我找到了自动更改 window 标题栏图标颜色的解决方案。我使用 Gtk.HeaderBar
而不是默认的 window 标题栏,并在标题栏左侧添加了一个 Gtk.Image
(它的名称是 image_headerbar
)。最后,我使用以下代码设置了图像图标并且它起作用了:
image_headerbar.set_from_icon_name("icon-symbolic", -1)
当系统主题更改为 white/dark 时,图标颜色自动更改为 dark/white。
我尝试了几种动态更改 window 标题栏上的图标颜色的方法。但是如果不使用 Gtk.HeaderBar
,其中 none 会起作用。
但是 window 标题栏高度比默认 window 标题栏高一点,当使用 Gtk.HeaderBar
时(在 XFCE 桌面环境下测试)。
我有一个 GTK3
GUI 由一个简单的 Python 3 代码调用。图标位于 /usr/share/icons/hicolor/scalable/actions/
目录中。我当前的主题颜色是深色,图标看起来是白色的。当我切换到白色系统主题时,GUI 图标变成黑色。但是在我的代码中,当激活深色主题时,图标看起来是黑色而不是白色。
当我从 Glade 程序中选择图标名称 (icon-symbolic
) 并保存 UI 文件时它起作用了。图标文件是一个简单的黑色方形 .svg 文件(在 Inkscape 中绘制)。
解决方案是什么?
OS: Debian-like Linux, Python 3, GTK 3.24
简单Python代码:
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()
简单UI文件:
<?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>
我找到了自动更改 window 标题栏图标颜色的解决方案。我使用 Gtk.HeaderBar
而不是默认的 window 标题栏,并在标题栏左侧添加了一个 Gtk.Image
(它的名称是 image_headerbar
)。最后,我使用以下代码设置了图像图标并且它起作用了:
image_headerbar.set_from_icon_name("icon-symbolic", -1)
当系统主题更改为 white/dark 时,图标颜色自动更改为 dark/white。
我尝试了几种动态更改 window 标题栏上的图标颜色的方法。但是如果不使用 Gtk.HeaderBar
,其中 none 会起作用。
但是 window 标题栏高度比默认 window 标题栏高一点,当使用 Gtk.HeaderBar
时(在 XFCE 桌面环境下测试)。