我已经使用Glade和PyGObject构建了一个应用程序。现在,我试图在我的GUI上包括一个部分,该部分可以根据某些选择显示图。经过研究,我发现可以包含使用matplotlib生成的图,如本例所示:https://github.com/tobias47n9e/GTK3-Matplotlib-Cookbook/blob/master/examples/matplotlibwindow.py
我尝试了该示例,并且工作正常。在代码之后,我使用以下行添加了一个滚动窗口(添加到主窗口中的网格):
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”保存绘图,然后显示图像会影响性能?
答案 0 :(得分:0)
您的set_charts
方法中似乎缺少的是self.canvas.show()
和self.scrolledwin.show()
。每次向gui添加内容时,都必须调用其show
方法或其容器窗口小部件的show_all
方法。
在您链接的示例中,所有小部件都添加在同一级别(脚本级别),并且调用my_first_window.show_all()
以显示窗口及其所有子级。
由于您是在方法中添加self.scroledwin
和self.canvas
小部件(假设您在调用self.your_main_window.show_all()
之后,可能是在__init__
方法中),您需要show
添加的那些小部件才能显示它们。