如何在PyQt4中修改QAction的图标大小?
在PyQt4中修改QAction图标大小的解决方案
你用自定义QCommonStyle的思路完全找对了方向!通过重写样式类的pixelMetric方法,我们可以轻松控制QAction在菜单里的图标尺寸。我把你的代码整理得更规范,还补充了完整的使用示例,方便你参考:
首先,我们需要自定义一个样式类,专门修改小图标的尺寸(菜单里的QAction图标默认使用这个尺寸):
from PyQt4.QtGui import QCommonStyle, QStyle class MyStyle(QCommonStyle): def pixelMetric(self, metric, option=None, widget=None): # 针对菜单中小图标的尺寸进行修改 if metric == QStyle.PM_SmallIconSize: return 30 # 这里替换成你想要的像素大小,比如24、40都可以 # 其他所有尺寸保持系统默认 return super(MyStyle, self).pixelMetric(metric, option, widget)
接下来是使用这个样式的完整代码示例,以右键菜单为例:
from PyQt4.QtGui import QMenu, QAction, QApplication, QWidget from PyQt4.QtCore import Qt import sys class MainWindow(QWidget): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.init_menu() def init_menu(self): # 创建右键菜单 self.popMenu = QMenu(self) # 添加一个带系统默认图标的QAction作为示例 new_folder_action = QAction("新建文件夹", self) new_folder_action.setIcon(self.style().standardIcon(QStyle.SP_FileDialogNewFolder)) self.popMenu.addAction(new_folder_action) # 给菜单应用我们自定义的样式 self.popMenu.setStyle(MyStyle()) # 设置右键菜单触发规则 self.setContextMenuPolicy(Qt.CustomContextMenu) self.customContextMenuRequested.connect(self.show_right_menu) def show_right_menu(self, pos): # 在鼠标位置显示菜单 self.popMenu.exec_(self.mapToGlobal(pos)) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.resize(400, 300) window.show() sys.exit(app.exec_())
关键要点说明:
QStyle.PM_SmallIconSize是Qt内置的像素度量枚举,对应菜单、上下文菜单里的小图标尺寸,修改它的返回值就能直接改变QAction图标的大小。- 如果需要调整工具栏里的QAction图标尺寸,只需要在
pixelMetric方法里增加对QStyle.PM_ToolBarIconSize的判断,返回对应的数值即可。 - 一定要确保把自定义样式设置给对应的QMenu(或QToolBar),这样样式才能生效。
内容的提问来源于stack exchange,提问作者Liron Lavi
相关产品推荐
相关产品推荐

