qdockwidget内部的figurecanvasqtagg不适合并重叠
我正在尝试嵌入一个figurecanvasqtagg,但是当我这样做时,它与关闭和调整大小按钮所在的窗口顶部重叠。
我不确定为什么会发生这种行为。
这是一个代码示例,它使重现问题更容易:
import sys
import matplotlib; matplotlib.use("Qt5Agg")
from PyQt5 import QtWidgets, QtCore # <- additional import
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT
from matplotlib.figure import Figure
from netgraph import EditableGraph
class MplCanvas(FigureCanvasQTAgg):
def __init__(self, parent=None, width=5, height=4, dpi=100):
super(MplCanvas, self).__init__(Figure(figsize=(width, height), dpi=dpi))
self.setParent(parent)
self.ax = self.figure.add_subplot(111)
self.graph = EditableGraph([(0, 1)], ax=self.ax)
class Dock(QtWidgets.QDockWidget):
def __init__(self):
super().__init__()
self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
self.canvas.setFocusPolicy(QtCore.Qt.ClickFocus)
self.canvas.setFocus()
self.toolbar = NavigationToolbar2QT(self.canvas, self)
self.setFeatures(QtWidgets.QDockWidget.DockWidgetFloatable | QtWidgets.QDockWidget.DockWidgetMovable | QtWidgets.QDockWidget.DockWidgetClosable)
aux = QtWidgets.QVBoxLayout()
aux.addWidget(self.canvas)
self.setLayout(aux)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
widget = QtWidgets.QWidget()
self.setCentralWidget(widget)
layout = QtWidgets.QVBoxLayout(widget)
self.dock = Dock()
self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dock)
def main():
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
if __name__ == "__main__":
main()
如何使figurecanvasqtagg仅适用于dockwidget?
I am trying to embed a FigureCanvasQTAgg, however when I do it it overlaps the top of the window where the close and resize buttons are located.
I am not sure why this behavior occurs.
Here is a code example that makes it easier to reproduce the problem:
import sys
import matplotlib; matplotlib.use("Qt5Agg")
from PyQt5 import QtWidgets, QtCore # <- additional import
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg, NavigationToolbar2QT
from matplotlib.figure import Figure
from netgraph import EditableGraph
class MplCanvas(FigureCanvasQTAgg):
def __init__(self, parent=None, width=5, height=4, dpi=100):
super(MplCanvas, self).__init__(Figure(figsize=(width, height), dpi=dpi))
self.setParent(parent)
self.ax = self.figure.add_subplot(111)
self.graph = EditableGraph([(0, 1)], ax=self.ax)
class Dock(QtWidgets.QDockWidget):
def __init__(self):
super().__init__()
self.canvas = MplCanvas(self, width=5, height=4, dpi=100)
self.canvas.setFocusPolicy(QtCore.Qt.ClickFocus)
self.canvas.setFocus()
self.toolbar = NavigationToolbar2QT(self.canvas, self)
self.setFeatures(QtWidgets.QDockWidget.DockWidgetFloatable | QtWidgets.QDockWidget.DockWidgetMovable | QtWidgets.QDockWidget.DockWidgetClosable)
aux = QtWidgets.QVBoxLayout()
aux.addWidget(self.canvas)
self.setLayout(aux)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
widget = QtWidgets.QWidget()
self.setCentralWidget(widget)
layout = QtWidgets.QVBoxLayout(widget)
self.dock = Dock()
self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.dock)
def main():
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
if __name__ == "__main__":
main()
How do I make the FigureCanvasQTAgg fit only inside the DockWidget?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论