如何使 matplotlib 工具栏能够停靠在 pyqt5 window 的一侧?
How do I make the matplotlib toolbar able to dock to the side in a pyqt5 window?
我在 pyqt5 window 中嵌入了一个 matplotlib 图和工具栏,这是我的代码:
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtWidgets
class PlotWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(PlotWindow, self).__init__(parent=parent)
self.figure = Figure(tight_layout=True)
self.canvas = FigureCanvas(self.figure)
self.setCentralWidget(self.canvas)
self.toolbar = NavigationToolbar(self.canvas, self)
self.addToolBar(self.toolbar)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mw = PlotWindow()
ax = mw.figure.add_subplot()
mw.show()
exit(app.exec_())
这是它的样子:
我可以将工具栏拖到底部并将其固定在那里:
但我无法将它停靠在侧面(左侧或右侧)。
这是你可以用任何其他标准 pyqt5 工具栏做的事情,为什么它不能用 matplotlib 工具栏?我该如何让它发挥作用?
我可以通过更改此行在代码中完成:
# self.addToolBar(self.toolbar)
self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)
结果是:
这就是我想要的,但是如果我从左侧取消停靠工具栏,我将无法再将它停靠在那里,只能停靠在顶部和底部。
matplotlib提供的QToolBar配置为只允许在顶部拖动,信息如the source code:
self.setAllowedAreas(QtCore.Qt.ToolBarArea(
_to_int(_enum("QtCore.Qt.ToolBarArea").TopToolBarArea) |
_to_int(_enum("QtCore.Qt.ToolBarArea").BottomToolBarArea)))
解决方法是建立所有区域:
self.toolbar.setAllowedAreas(QtCore.Qt.ToolBarArea.AllToolBarAreas)
我在 pyqt5 window 中嵌入了一个 matplotlib 图和工具栏,这是我的代码:
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtWidgets
class PlotWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(PlotWindow, self).__init__(parent=parent)
self.figure = Figure(tight_layout=True)
self.canvas = FigureCanvas(self.figure)
self.setCentralWidget(self.canvas)
self.toolbar = NavigationToolbar(self.canvas, self)
self.addToolBar(self.toolbar)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mw = PlotWindow()
ax = mw.figure.add_subplot()
mw.show()
exit(app.exec_())
这是它的样子:
我可以将工具栏拖到底部并将其固定在那里:
但我无法将它停靠在侧面(左侧或右侧)。
这是你可以用任何其他标准 pyqt5 工具栏做的事情,为什么它不能用 matplotlib 工具栏?我该如何让它发挥作用?
我可以通过更改此行在代码中完成:
# self.addToolBar(self.toolbar)
self.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolbar)
结果是:
这就是我想要的,但是如果我从左侧取消停靠工具栏,我将无法再将它停靠在那里,只能停靠在顶部和底部。
matplotlib提供的QToolBar配置为只允许在顶部拖动,信息如the source code:
self.setAllowedAreas(QtCore.Qt.ToolBarArea(
_to_int(_enum("QtCore.Qt.ToolBarArea").TopToolBarArea) |
_to_int(_enum("QtCore.Qt.ToolBarArea").BottomToolBarArea)))
解决方法是建立所有区域:
self.toolbar.setAllowedAreas(QtCore.Qt.ToolBarArea.AllToolBarAreas)