使用matplotlib和PyGObject在GUI上显示绘图

使用matplotlib和PyGObject在GUI上显示绘图,matplotlib,gtk3,pygobject,Matplotlib,Gtk3,Pygobject,我使用Glade和PyGObject构建了一个应用程序。现在,我试图在我的GUI上包含一个部分,它可以根据一些选择显示绘图。经过一些研究,我发现我可以包括使用matplotlib生成的图,如本例所示: 我试过这个例子,效果很好。在代码之后,我使用以下行添加了一个滚动窗口(到主窗口中的网格中): self.scrolledwin = self.builder.get_object("scrolledwin") 使用代码中的相同行生成绘图并将其设置为滚动窗口: def set_charts(sel

我使用Glade和PyGObject构建了一个应用程序。现在,我试图在我的GUI上包含一个部分,它可以根据一些选择显示绘图。经过一些研究,我发现我可以包括使用matplotlib生成的图,如本例所示:

我试过这个例子,效果很好。在代码之后,我使用以下行添加了一个滚动窗口(到主窗口中的网格中):

self.scrolledwin = self.builder.get_object("scrolledwin")
使用代码中的相同行生成绘图并将其设置为滚动窗口:

def set_charts(self):

    fig = Figure(figsize=(5,5), dpi=100)
    ax = fig.add_subplot(111, projection='polar')

    N = 20
    theta = linspace(0.0, 2 * pi, N, endpoint=False)
    radii = 10 * random.rand(N)
    width = pi / 4 * random.rand(N)

    bars = ax.bar(theta, radii, width=width, bottom=0.0)

    for r, bar in zip(radii, bars):
        bar.set_facecolor(cm.jet(r / 10.))
        bar.set_alpha(0.5)

    ax.plot()

    canvas = FigureCanvas(fig)
    canvas.set_size_request(400,400)
    self.scrolledwin.add_with_viewport(canvas)
但是,在我的应用程序中,滚动窗口部分为空,不显示绘图


我怎样才能解决这个问题?另外,使用“matplotlib.pyplot.savefig”保存绘图,然后显示图像是否会影响性能?

您的
set\u charts
方法中似乎缺少的是
self.canvas.show()
self.scrolledwin.show()
。每次向gui添加内容时,都必须调用其容器小部件的
show
方法或
show\u all
方法

在您链接的示例中,所有小部件都添加到同一级别(脚本级别),并且
my\u first\u window.show\u all()
被调用以在末尾显示窗口及其所有子窗口

由于要在方法中添加
self.scroledwin
self.canvas
小部件(我假设,在调用
self.your_main_window.show_all()
之后,可能是在
\uu init\uuu
方法中),您需要
显示这些添加的小部件,以便显示它们


来源:

您是否尝试过
self.canvas.show()
self.scrolledwin.show()
甚至
self.your_主窗口.show_all()
?这就是我们所缺少的。self。我的主窗口。show_all()就在那里。添加canvas.show()/self.scrolledwin.show\u all()有效。如果你能补充这一点作为答案,我会接受的。谢谢你的指点!