我在 pyqt5 窗口中嵌入了一個 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 配置為只允許拖動頂部和源代碼中看到的信息:
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句