【问题标题】:GTK - Python Window Symbolic Icon Color ProblemGTK - Python 窗口符号图标颜色问题
【发布时间】:2021-11-08 13:47:40
【问题描述】:

我有一个由简单的 Python 3 代码调用的GTK3 GUI。图标位于/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()

简单的用户界面文件:

<?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>

【问题讨论】:

  • 您在UI文件中定义图像时说“它可以工作”:您的意思是图标颜色正确还是错误?
  • 图标颜色正确。换句话说,图标颜色变为与 GUI 相对的颜色(白色系统 GUI 上的深色图标,深色系统 GUI 上的白色图标)。
  • 为什么不在 UI 文件中定义图标?
  • 这是一个简单的例子。在我的代码中,图标是在 UI 文件中定义的,但有时图标的定义与在这个简单示例中的定义相同。因为这些图标在某些情况下会发生变化。它们并不总是相同的。
  • 感谢您的澄清,我应该想到的 :-)。

标签: python svg icons gtk gtk3


【解决方案1】:

我找到了一种自动更改窗口标题栏上图标颜色的解决方案。我使用Gtk.HeaderBar 代替默认窗口标题栏,并在标题栏左侧添加了Gtk.Image(其名称为image_headerbar)。最后,我使用以下代码设置了图像图标并且它起作用了:

image_headerbar.set_from_icon_name("icon-symbolic", -1)

当系统主题变为白色/深色时,图标颜色会自动变为深色/白色。

我尝试了几种方法来动态更改窗口标题栏上的图标颜色。但是如果不使用Gtk.HeaderBar,它们都不起作用。

但是当使用Gtk.HeaderBar时,窗口标题栏高度比默认窗口标题栏高一点(在XFCE桌面环境测试)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2017-10-25
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多