Hyp*_*phe 11 python icons pyqt pyqt4 qt-designer
我很难显示从当前图标主题中选择的QAction的图标.我用Qt设计师制作了ui并将其导出pyuic4 sample.ui > sample.py
.从主题设置图标后self.actionSample.setIcon(QtGui.QIcon.fromTheme(_fromUtf8("document-open")))
,我得到以下源代码:
from PyQt4 import QtCore, QtGui
import sys
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 600)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtGui.QToolBar(MainWindow)
self.toolBar.setObjectName(_fromUtf8("toolBar"))
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.actionSample = QtGui.QAction(MainWindow)
self.actionSample.setObjectName(_fromUtf8("actionSample"))
self.actionSample.setIcon(QtGui.QIcon.fromTheme(_fromUtf8("document-open")))
self.toolBar.addAction(self.actionSample)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)
window.show()
app.exec_()
Run Code Online (Sandbox Code Playgroud)
当我执行它时,工具栏不会显示图标'document-open'.这是一个错误还是我做错了什么?
谢谢
ekh*_*oro 11
使用的图标查找过程QIcon.fromTheme
有点复杂.
对于GNOME和KDE桌面环境,仅在X11平台上直接支持图标主题.对于其他平台/桌面,有必要与应用程序一起安装主题,或以各种方式调整用户的环境.
要查找GNOME的当前系统主题,Qt将查询gconf(如果gtk样式可用),否则默认为"gnome"主题.对于KDE,Qt将检查kdeglobals
设置文件,否则默认为"氧气"(或早期版本的KDE的"crystalsvg").此外,"hicolor"主题始终可以用作后备.
一旦确定了系统主题名称,Qt将在各种预定位置查找包含图标的目录,这又取决于所使用的平台和桌面.在X11上,这包括$HOME/.icons
和$XDG_DATA_DIRS/icons
.所有平台/桌面共有的唯一位置是资源路径:/icons
.
图标主题目录必须包含一个index.theme
文件,其中(除其他外)指定可以包含图标的子目录.只有一个图标文件png
或svg
扩展使用.
本QIcon
类有一些静态方法,它会显示正是Qt是寻找主题图标:
>>> from PyQt4 import QtGui
>>> app = QtGui.QApplication([])
>>> for path in QtGui.QIcon.themeSearchPaths():
... print "%s/%s" % (path, QtGui.QIcon.themeName())
...
/home/ekhumoro/.icons/hicolor
/usr/local/share/icons/hicolor
/usr/share/icons/hicolor
:/icons/hicolor
Run Code Online (Sandbox Code Playgroud)
如果没有显示"文档打开"图标,Qt要么在"错误"的位置查看,要么图标完全丢失.
更新:
如上所述:默认情况下,Qt仅在X11平台上支持GNOME和KDE.它对FluxBox WM一无所知,因此无法检测当前的图标主题.这意味着它将回归到使用最小的"hicolor"主题,这可能没有所有必需的图标.
解决此问题的一种方法是创建一个指向您要使用的主题的"hicolor"符号链接.理想情况下,这应该位于Qt搜索路径列表中的第一个位置:
$ ln -s icon/theme/directory $HOME/.icons/hicolor
Run Code Online (Sandbox Code Playgroud)
更新2:
Qt5默认只支持kde和gnome,但Qt平台抽象层至少可以创建自定义主题插件(LXQT是一个利用此功能的桌面环境).还有几个DE现在被视为gtk/gnome:X-CINNAMON,UNITY,MATE,XFCE和LXDE.
归档时间: |
|
查看次数: |
7706 次 |
最近记录: |