Значки системной темы и PyQt4

Я пишу базовую программу на Python, используя модуль PyQt4. Я хотел бы иметь возможность использовать значки моей системной темы для таких вещей, как значок диалогового окна настроек, но я понятия не имею, как это сделать. Итак, у меня вопрос: как узнать местоположение значка, но убедиться, что оно меняется в зависимости от темы значка системы? Если это важно, я разрабатываю это под Ubuntu 9.04, поэтому я использую рабочий стол gnome.


person Cdsboy    schedule 15.06.2009    source источник


Ответы (3)


К сожалению, похоже, что Qt не поддерживает получение значков для определенной темы. Есть способы сделать это как для KDE, так и для Gnome.

Путь KDE довольно элегантен, что имеет смысл, учитывая, что Qt - это инструментарий KDE. Вместо использования класса QIcon PyQt4.QtGui вы вместо этого используете класс KIcon PyKDE4.kdeui. Пример этого:

from PyKDE4.kdeui import *
icon = KIcon("*The Icon Name*")

см. документацию PyKDE для этого класса, здесь.

Один из способов получить поддержку этого для gnome - использовать пакет python gtk. Это не так хорошо, как в kde, но тем не менее работает. Его можно использовать так:

from PyQt4 import QtGui
from gtk import icon_theme_get_default

iconTheme = icon_theme_get_default()
iconInfo = iconTheme.lookup_icon("*The Icon Name*", *Int of the icon size*, 0)
icon = QtGui.QIcon(iconInfo.get_filename())

См. Документацию по классу темы значков и класс информации о значке.

РЕДАКТИРОВАТЬ: спасибо за исправление CesarB

person Cdsboy    schedule 16.06.2009
comment
Новый синтаксис - QIcon.fromTheme('icon_name', fallback). Мне потребовалось время, чтобы найти его! - person Blender; 14.11.2011

Используйте класс PyKDE4 KIcon:

http://api.kde.org/pykde-4.2-api/kdeui/KIcon.html

person Community    schedule 15.06.2009
comment
Спасибо за ответ :) Хотя я бы хотел что-то менее зависимое от KDE, я собираюсь принять это как ответ, пока не появится что-нибудь получше. - person Cdsboy; 16.06.2009

Не так давно я сам провел приличное количество исследований и пришел к выводу, что, к сожалению, Qt не предоставляет эту функциональность кроссплатформенным образом. В идеале класс QIcon должен иметь значения по умолчанию для открытия файла, сохранения, '+', '-', настроек и т. Д., Но, учитывая, что это не так, вам нужно будет выбрать соответствующий значок для среды рабочего стола.

person Daniel Naab    schedule 16.06.2009
comment
Я пришел к такому же выводу. Я собираюсь написать ответ, который включает методы как для KDE, так и для Gnome. - person Cdsboy; 16.06.2009