簡體   English   中英

在PyQt5中嵌入Matplotlib:工具欄不起作用

[英]Embedding Matplotlib in PyQt5: Toolbar doesn't work

我正在開發一個使用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. 我還沒有找到一種使圖像適合畫布的方法,圖像通常比畫布區域大得多。

有任何想法嗎?

丹尼斯打招呼

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM