我正在嘗試不使用導航工具列,而是想在主視窗工具列中添加這些操作。下面是一個定制的例子:
import sys
import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5.QtWidgets import QToolBar, QMainWindow, QAction, qApp, QApplication
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
class MplCanvas(FigureCanvasQTAgg)。
def __init__(self, parent=None, width=5, height=4, dpi=100) 。
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).__init__(fig)
class MainWindow(QtWidgets.QMainWindow)。
def __init__(self, *args, **kwargs)。
super(MainWindow, self) .__init__(*args, **kwargs)
zoomact = QAction(QIcon('zoom.png'), 'zoom', self)
zoomact.setShortcut('Ctrl z')
zoomact.triggered.connect(self.zoom)
self.toolbar = self.addToolBar('zoom')
self.toolbar.addAction(zoomact)
self.sc = MplCanvas(self, width=5, height=4, dpi=100)
self.sc.axes. plot([0,1,2,3,4] 。[10,1,20,3,40] )
#
toolbar = NavigationToolbar(self.sc, self)
""這里我不想使用NavigationToolbar,而是想在
工具列中的自定義動作。所以我不想顯示NavigationToolbar""。
"圖畫布中是否有任何自定義函式"
layout = QtWidgets.QVBoxLayout()
layout.addWidget(toolbar)
layout.addWidget(self.sc)
# Create a placeholder widget to hold our toolbar and canvas.
widget = QtWidgets.QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
self.show()
"為一個特定的數字定制函式"。
def zoom(self)。
""在這里,我想從NavigationToolbar呼叫特定的縮放函式
來應用于這個特定的FigureCanvas,使用lambda函式""。
# My trial. 我不知道,我搞不清楚:)
lambda sc: NavigationToolbar2QT.toolitems["zoom"] (self.sc, self)
def home(self)。
pass。
def Editaxis(self)。
pass。
def configuresubplots(self)。
pass。
def save(self)。
pass。
def leftbuttonpans(self)。
pass。
def backtopreviousview(self)。
pass。
def forwardtonextview(self)。
pass。
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
app.exec_()
所以,
- 我想隱藏NavigationToolbar,不使用它 。
- 然后,在主視窗工具列中創建可對畫布中的圖形采取行動的自定義操作,例如縮放、編輯軸..... 等。
uj5u.com熱心網友回復:
你必須將None作為NavigationToolbar2QT的父節點:
import sys
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5.QtWidgets import QAction, QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT
from matplotlib.figure import Figure
class MplCanvas(FigureCanvasQTAgg)。
def __init__(self, parent=None, width=5, height=4, dpi=100) 。
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).__init__(fig)
class MainWindow(QMainWindow)。
def __init__(self, *args, **kwargs)。
super(MainWindow, self) .__init__(*args, **kwargs)
print("Text: Name of method"/span>)
for text, _, _, callback in NavigationToolbar2QT.toolitems。
if isinstance(text, str)。
print(f"{text}: {callback}")
self.sc = MplCanvas(self, width=5, height=4, dpi=100)
self.mpl_toolbar = NavigationToolbar2QT(self.sc, None)
zoomact = QAction(QIcon("zoom.png"), "zoom", self)
zoomact.setShortcut("Ctrl z")
zoomact.triggered.connect(self.mpl_toolbar.zoom)
self.toolbar = self.addToolBar("zoom")
self.toolbar.addAction(zoomact)
self.sc.axes. plot([0, 1, 2, 3, 4], [10, 1, 20, 3, 40] )
widget = QWidget()
self.setCentralWidget(widget)
layout = QVBoxLayout(widget)
layout.addWidget(self.sc)
def main()。
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
if __name__ == "__main__"/span>:
main()
另一個選擇是將QActions從NavigationToolbar2QT中移除:
import sys
import matplotlib
matplotlib.use("Qt5Agg")
from PyQt5.QtWidgets import QAction, QApplication, QMainWindow, QVBoxLayout, QWidget
from PyQt5.QtGui import QIcon
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT
from matplotlib.figure import Figure
class MplCanvas(FigureCanvasQTAgg)。
def __init__(self, parent=None, width=5, height=4, dpi=100) 。
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
super(MplCanvas, self).__init__(fig)
class MainWindow(QMainWindow)。
def __init__(self, *args, **kwargs)。
super(MainWindow, self) .__init__(*args, **kwargs)
print("Text: Name of method"/span>)
for text, _, _, callback in NavigationToolbar2QT.toolitems。
if isinstance(text, str)。
print(f"{text}: {callback}")
self.sc = MplCanvas(self, width=5, height=4, dpi=100)
self.toolbar = NavigationToolbar2QT(self.sc, self)
self.addToolBar(self.toolbar)
self.toolbar.clear()
zoomact = QAction(QIcon("zoom.png"), "zoom", self)
zoomact.setShortcut("Ctrl z")
zoomact.triggered.connect(self.toolbar.zoom)
self.toolbar.addAction(zoomact)
self.sc.axes. plot([0, 1, 2, 3, 4], [10, 1, 20, 3, 40] )
widget = QWidget()
self.setCentralWidget(widget)
layout = QVBoxLayout(widget)
layout.addWidget(self.sc)
def main()。
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
if __name__ == "__main__"/span>:
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/312396.html
標籤:
上一篇:我可以從一個字串的每一行中只提取整數并將其保存在一個串列中嗎?
下一篇:未定義Pyplot散點圖名稱
