Иконки системных тем и PyQt4 - PullRequest
8 голосов
/ 15 июня 2009

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

Ответы [ 3 ]

7 голосов
/ 16 июня 2009

К сожалению, похоже, что 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())

См. Документацию для Класса Icon Icon и Icon Info class .

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

0 голосов
/ 16 июня 2009

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

0 голосов
/ 16 июня 2009

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

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

...