Отображение графика в графическом интерфейсе с использованием matplotlib и PyGObject - PullRequest
0 голосов
/ 05 сентября 2018

Я создал приложение, используя Glade и PyGObject. Теперь я пытаюсь включить раздел в моем графическом интерфейсе, который может отображать графики на основе некоторого выбора. После некоторых исследований я обнаружил, что могу включить графики, созданные с помощью 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" и последующего отображения изображения?

1 Ответ

0 голосов
/ 07 сентября 2018

Что, кажется, отсутствует в вашем set_charts методе - это self.canvas.show() и self.scrolledwin.show(). Каждый раз, когда вы добавляете что-то в графический интерфейс, вы должны вызывать его метод show или метод show_all его виджета-контейнера.

В приведенном вами примере все виджеты добавляются на одном уровне (уровне сценария), и вызывается my_first_window.show_all(), чтобы показать окно и все его дочерние элементы в конце.

Поскольку вы добавляете виджеты self.scroledwin и self.canvas в метод (я предполагаю, что после вызова self.your_main_window.show_all(), вероятно, в методе __init__) вам необходимо show эти добавлены виджеты для их отображения.

Источник: Gtk.Widget - gtk-widget-show

...