Python 在PyQt5中嵌入Matplotlib:Toolbar不会';行不通
我正在使用matplotlib和pyqt5开发一个图像处理应用程序。下面是一些代码: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
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()
现在,如果我加载图像并将其打印到画布上,会出现两个问题:
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行才能使其工作。我会找问题的。将您的答案标记为正确,很遗憾无法投票给您。