Python 在PyQt5中嵌入Matplotlib:Toolbar不会';行不通

Python 在PyQt5中嵌入Matplotlib:Toolbar不会';行不通,python,matplotlib,pyqt5,Python,Matplotlib,Pyqt5,我正在使用matplotlib和pyqt5开发一个图像处理应用程序。下面是一些代码: class MainForm(QtWidgets.QMainWindow): def __init__(self): super(MainForm, self).__init__() uic.loadUi("...", self) self.setup_ui_elements() self.figure = Figure(figsiz

我正在使用matplotlib和pyqt5开发一个图像处理应用程序。下面是一些代码:

class MainForm(QtWidgets.QMainWindow):

    def __init__(self):
        super(MainForm, self).__init__()
        uic.loadUi("...", self)

        self.setup_ui_elements()

        self.figure = Figure(figsize=(5, 4), dpi=100)

        self.canvas = FigureCanvas(self.figure)
        self.toolbar = NaviToolbar(self.canvas, self)

        self.MiddleRightLayout.addWidget(self.toolbar)
        self.MiddleRightLayout.addWidget(self.canvas)

    def plot(self, img):
        self.figure.figimage(img)
        self.canvas.draw()
现在,如果我加载图像并将其打印到画布上,会出现两个问题:

  • 工具栏将显示,但不起作用(例如缩放、平移等)
  • 我还没有找到一种方法使图像适合画布,图像通常比画布区域大得多
  • 有什么想法吗

    欢迎,丹尼斯被直接放在画布上,没有轴。这意味着它不会自动缩放到画布或任何其他对象,也意味着缩放和平移工具没有任何效果

    如果需要,可以使用figimage的
    resize
    参数,
    self.figure.figimage(img,resize=True)
    使画布适合图像。否则,您可能需要使用
    imshow
    绘图

    为了将图像缩放到其原始大小,需要对间距进行一些调整

    import matplotlib.pyplot as plt
    import numpy as np 
    
    
    def plot(self, img):
        self.ax = self.figure.add_subplot(111)
        self.figure.subplots_adjust(.1,.1,.9,.9) # 10% margin around image
        h, w = np.array(img.shape[:2])/self.figure.dpi
        self.figure.set_size_inches(w/0.8,h/0.8)
        self.ax.imshow(img)
        self.ax.axis("off") # in case you want to turn the axes off
        self.canvas.draw()
    

    谢谢你的回复,这正是我想要的,轴是不需要的,但是如果它们被显示出来也不会有太大的问题。我将resize参数设置为True,但它仍然不起作用。也许还有别的想法我做错了什么?你好,丹尼斯什么不起作用
    resize=True
    使画布适合图像。你观察到了不同的东西吗?好的,对不起,我误读了你的回答。如果我设置resize=True,画布大小实际上就是图像的大小。所以我想做的是:在图形窗口的中心显示图像,并按其大小缩放。工具栏应该可以正常工作。因此,使用imshow将是一种更好的方法?是的,如果您想要一个工作工具栏,请使用
    imshow
    。我更新了答案。(但我无法测试)它可以工作!非常感谢你!编辑:必须注释掉第3-5行才能使其工作。我会找问题的。将您的答案标记为正确,很遗憾无法投票给您。