【问题标题】:Embedding Matplotlib in PyQt5: Toolbar doesn't work在 PyQt5 中嵌入 Matplotlib:工具栏不起作用
【发布时间】:2017-07-08 18:25:31
【问题描述】:

我正在开发一个使用 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()

现在,如果我加载图像并将其绘制到画布上,则会出现两个问题:

  1. 工具栏将显示,但没有效果(例如缩放、平移等)
  2. 我还没有找到使图像适合画布的方法,图像通常比画布区域大得多。

有什么想法吗?

你好,丹尼斯

【问题讨论】:

    标签: python matplotlib pyqt5


    【解决方案1】:

    figimage 直接放置在没有轴的画布上。这意味着它不会自动缩放到画布或其他任何东西,也意味着缩放和平移工具没有任何效果。

    您可以使用 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-argument 设置为 True 但它仍然不起作用。也许另一个想法我做错了什么?问候,丹尼斯
    • 什么不起作用? resize=True 使画布适合图像。你观察到不同的东西吗?
    • 好的,抱歉,我误读了您的回复。如果我设置 resize=True,画布大小确实是图像的大小。所以这就是我想要做的:在图形窗口的中心显示图像,缩放到它的大小。并且工具栏应该可以工作。那么使用 imshow 会是更好的方法吗?
    • 是的,如果您想要一个工作工具栏,请使用imshow。我更新了答案。 (但我无法测试)
    • 有效!非常感谢你!编辑:必须注释掉第 3-5 行才能让它工作。我会寻找问题的。已将您的答案标记为正确,很遗憾无法为您投票。
    猜你喜欢
    • 2018-11-03
    • 2019-04-14
    • 1970-01-01
    • 2018-07-14
    • 2023-03-21
    • 2018-06-24
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多