我编写了以下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
图标显示在“文件”下拉菜单中“新”字段的旁边,但不是。 PyQt绝对能够找到图标本身,我尝试过以与上述相同的方式获取它,并在单独的QLabel
中显示它,效果很好。
有人可以告诉这里发生了什么事吗?
答案 0 :(得分:1)
问题不是standardIcon,如果使用任何图标,您将观察到相同的行为。
在Qt4中,QAction的图标隐藏在菜单中,为了使其可见,有两种可能:
禁用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
的{{3}}方法:
action = QtGui.QAction(icon, name, self)
action.setIconVisibleInMenu(True)