PyQt/Matplotlib NavigationToolbar2QT添加按钮位置调整问题
将自定义按钮插入到导航工具栏左侧现有按钮之后
要把按钮放到左侧现有按钮后面,核心是找到工具栏布局里的水平间隔项(QSpacerItem),然后将按钮插入到它的前面,而不是默认添加到末尾。修改后的代码如下:
def add_toolbar(self): self.toolbar = NavigationToolbar(self.canvas, self, True) self.measure_button = QtWidgets.QToolButton(self.toolbar) self.measure_button.clicked.connect(self.measure) self.measure_button.setIcon(QtGui.QIcon('MyButtonIcon.jpg')) # 获取工具栏的布局 layout = self.toolbar.layout() # 遍历布局项,找到水平间隔项的索引 spacer_index = -1 for i in range(layout.count()): item = layout.itemAt(i) if isinstance(item, QtWidgets.QSpacerItem) and item.orientation() == QtCore.Qt.Horizontal: spacer_index = i break # 如果找到间隔项,插入按钮到它前面;否则默认添加 if spacer_index != -1: layout.insertWidget(spacer_index, self.measure_button) else: self.toolbar.addWidget(self.measure_button) self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolbar)
关键说明:
- NavigationToolbar的默认布局中,会有一个水平QSpacerItem用来将右侧元素(如坐标显示区)推到工具栏右端,左侧则是导航操作按钮。
- 通过遍历布局找到这个间隔项的位置,用
layout.insertWidget()将自定义按钮插入到间隔项之前,就能让按钮紧跟左侧现有按钮。 - 加入了容错判断,如果没找到间隔项,会退回到默认的添加方式,避免报错。
内容的提问来源于stack exchange,提问作者marcp
相关产品推荐
相关产品推荐

