PyQt4:QMenu 中不显示图标
PyQt4: icons not displayed in QMenu
我编写了以下 PyQt4 代码段:
#!/usr/bin/env python3
import sys
from typing import Callable, Optional
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self._createMenuBar()
def _createMenuBar(self):
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu("File")
fileMenu.addAction(self._createFileNewAction())
def _createFileNewAction(self) -> QtGui.QAction:
return self._createAction(
self.style().standardIcon(QtGui.QStyle.SP_DialogSaveButton),
"New",
QtGui.QKeySequence.New,
"Load new image to be annotated",
self._fileNew
)
def _createAction(
self,
icon: Optional[QtGui.QIcon],
name: str,
shortcut: Optional[QtGui.QKeySequence],
tooltip: Optional[str],
callback: Callable[[], None]
) -> QtGui.QAction:
if icon is not None:
action = QtGui.QAction(icon, name, self)
else:
action = QtGui.QAction(name, self)
if shortcut is not None:
action.setShortcut(shortcut)
action.setToolTip(tooltip)
action.setToolTip(tooltip)
self.connect(action, QtCore.SIGNAL('triggered()'), callback)
return action
def _fileNew(self):
pass
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
app.exec_()
当我执行该程序时,我希望 SP_DialogSaveButton
图标显示在 "File" 下拉菜单中的 "New" 字段旁边,但事实并非如此。 PyQt 肯定能够找到图标本身,我已经尝试用与上面相同的方式获取它并在单独的 QLabel
中显示它,效果很好。
谁能告诉我这是怎么回事?
问题不是标准图标,如果您使用任何图标,您都会观察到相同的行为。
在 Qt4 中,QActions 的图标隐藏在菜单中,要使它们可见,有两种可能性:
禁用 Qt::AA_DontShowIconsInMenus
属性:
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
app.setAttribute(QtCore.Qt.AA_DontShowIconsInMenus, False)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
使用QAction
的setIconVisibleInMenu()
方法:
action = QtGui.QAction(icon, name, self)
action.setIconVisibleInMenu(True)
我编写了以下 PyQt4 代码段:
#!/usr/bin/env python3
import sys
from typing import Callable, Optional
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self._createMenuBar()
def _createMenuBar(self):
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu("File")
fileMenu.addAction(self._createFileNewAction())
def _createFileNewAction(self) -> QtGui.QAction:
return self._createAction(
self.style().standardIcon(QtGui.QStyle.SP_DialogSaveButton),
"New",
QtGui.QKeySequence.New,
"Load new image to be annotated",
self._fileNew
)
def _createAction(
self,
icon: Optional[QtGui.QIcon],
name: str,
shortcut: Optional[QtGui.QKeySequence],
tooltip: Optional[str],
callback: Callable[[], None]
) -> QtGui.QAction:
if icon is not None:
action = QtGui.QAction(icon, name, self)
else:
action = QtGui.QAction(name, self)
if shortcut is not None:
action.setShortcut(shortcut)
action.setToolTip(tooltip)
action.setToolTip(tooltip)
self.connect(action, QtCore.SIGNAL('triggered()'), callback)
return action
def _fileNew(self):
pass
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
app.exec_()
当我执行该程序时,我希望 SP_DialogSaveButton
图标显示在 "File" 下拉菜单中的 "New" 字段旁边,但事实并非如此。 PyQt 肯定能够找到图标本身,我已经尝试用与上面相同的方式获取它并在单独的 QLabel
中显示它,效果很好。
谁能告诉我这是怎么回事?
问题不是标准图标,如果您使用任何图标,您都会观察到相同的行为。
在 Qt4 中,QActions 的图标隐藏在菜单中,要使它们可见,有两种可能性:
禁用
Qt::AA_DontShowIconsInMenus
属性:if __name__ == '__main__': app = QtGui.QApplication(sys.argv) app.setAttribute(QtCore.Qt.AA_DontShowIconsInMenus, False) mainWin = MainWindow() mainWin.show() sys.exit(app.exec_())
使用
QAction
的setIconVisibleInMenu()
方法:action = QtGui.QAction(icon, name, self) action.setIconVisibleInMenu(True)