【问题标题】:How to translate Matplotlib to pyQt5如何将 Matplotlib 翻译成 pyQt5
【发布时间】:2018-06-13 04:53:14
【问题描述】:

我正在研究 pyqt5,我必须使用一些 matplotlib。 我的意思是我仍然不知道如何在我的画布上显示这个?

class MyMplCanvas(FigureCanvas):
    """Ultimately, this is a QWidget (as well as a FigureCanvasAgg, 
etc.)."""

def __init__(self, parent=None, width=5, height=4, dpi=100):
    fig = Figure(figsize=(width, height), dpi=dpi)
    self.axes = fig.add_subplot(111)

    #self.compute_initial_figure(self,img)

    FigureCanvas.__init__(self, fig)
    self.setParent(parent)

    FigureCanvas.setSizePolicy(self,
                               QtWidgets.QSizePolicy.Expanding,
                               QtWidgets.QSizePolicy.Expanding)
    FigureCanvas.updateGeometry(self)

def compute_initial_figure(self,img):
    pass


class MyStaticMplCanvas(MyMplCanvas):
    """Simple canvas with a sine plot."""

 def compute_initial_figure(self,img):

        pattern,code,label = self.freeman(img) #iam getting this from another function 
        na = plt.imshow(label,cmap='Greys')
        plt.plot([i[1] for i in pattern],[i[0] for i in pattern ])
        plt.show()
        #t = arange(0.0, 3.0, 0.01)
        #s = sin(2*pi*t)
        #self.axes.plot(t,s)

在我的 MainWindow 中,我只是使用一个普通的类实例:

        self.sc = MyStaticMplCanvas(self.tab_2, width=2, height=2, 
                  dpi=100)
        self.sc.setGeometry(QtCore.QRect(70, 320, 300, 300))

【问题讨论】:

  • 我建议您删除其中一个标签并添加Matplotlib 标签。这样你会得到更多帮助。
  • 你使用的是哪个 pyqt?一个版本标签会更好。很多东西在 4 到 5 之间发生了变化。

标签: matplotlib pyqt pyqt5


【解决方案1】:

好吧,您的代码不可重现,但这是一个适用于 PyQt5 的版本。在你的代码中肯定行不通的——我认为——调用plt.show()。您想使用MyMplCanvas 生成的图形对象进行绘图,我认为pyplot 将使用它自己的 UI 而不是那个

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtWidgets 
import sys
import numpy as np

class MyMplCanvas(FigureCanvas):
    def __init__(self, parent=None, width=5.4, height=4, dpi=100):
        self.fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = self.fig.add_subplot(111)
        self.compute_initial_figure()

        FigureCanvas.__init__(self, self.fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

    def compute_initial_figure(self):
        pass

class MyStaticMplCanvas(MyMplCanvas):
    def compute_initial_figure(self):
        dat = np.random.uniform(0, 10, (20, 2))
        self.axes.scatter(dat[:, 0], dat[:, 1])

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        canvas = MyStaticMplCanvas()

        self.setCentralWidget(canvas)

def main():
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2011-03-09
    • 2011-09-05
    • 2017-12-26
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多