[英]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()
現在,如果我加載圖像並將其繪制到畫布上,則會出現兩個問題:
有任何想法嗎?
丹尼斯打招呼
將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.