Я знаю, что вы можете использовать цикл for для создания нескольких графиков с помощью matplotlib, но вы также можете использовать цикл для встраивания фигур в графический интерфейс?

Мне просто интересно, есть ли способ также создать цикл встроенных сюжетных фигур. Прямо сейчас я использую цикл for для создания нескольких отдельных окон графика. Поэтому я надеялся, что смогу использовать аналогичный цикл for для создания фигур и встраивания их в графический интерфейс, который я делаю. Также, если кто-то знаком с Pyforms, есть ли способ использовать цикл для создания нескольких виджетов управления одного и того же типа?

РЕДАКТИРОВАТЬ:

Сожалею. Позвольте мне уточнить вопрос. Я создал программу, которая получает данные из API EIA, а затем создает графики с этими данными. До сих пор я успешно использовал цикл for, который создает график для каждой интересующей серии. Цикл следующий:

                for idx, plot in enumerate(plots):
                    figs[idx] = plt.figure()
                    axs[idx] = figs[idx].add_subplot(111)
                    axs[idx].plot(plot[0], plot[1])
                    series_xlabel = []
                    i = 0
                    while i < series_count:
                        series_xlabel.append(plot[0][i])
                        i += round(series_count / 23)
                    axs[idx].set_xticklabels(reversed(series_xlabel))
                    axs[idx].locator_params('x', nbins=23)
                    axs[idx].tick_params('x', rotation=22)
                    axs[idx].set_xlabel('Dates')
                    axs[idx].set_ylabel(series_rawdata_yname[idx])
                    axs[idx].set_title(series_rawdata_sname[idx])

куда plots является списком, и каждый элемент в нем является необработанными данными каждой серии, извлеченными из API. Цикл также извлекает и называет каждый график с соответствующим заголовком для каждой выбранной серии. Каждый график сделан в отдельном окне с рисунками, что пока хорошо, но я хотел бы встроить каждый из этих рисунков в графический интерфейс, который я делаю, используя библиотеку Pyforms. Теперь Pyforms имеет совместимость с matplotlib и даже имеет собственный виджет для фигур matplotlib, но я не могу понять, как использовать виджет в цикле. Поэтому я думал, что альтернативой будет использование вышеупомянутого цикла для встраивания каждой из фигур в графический интерфейс. Мне было интересно, если это возможно. Что касается Pyforms, я попытался проверить, можете ли вы использовать циклы с виджетами, которые он предоставляет. Кажется, что можно использовать цикл, но он показывает только последнюю итерацию цикла в тестовом графическом интерфейсе. Тестовый код, который я сделал, выглядит следующим образом:

  import pyforms
  from pyforms import BaseWidget
  from pyforms.Controls import ControlDockWidget
  from pyforms.Controls import ControlMatplotlib

  class test(BaseWidget):

      def __init__(self):

          super(test, self).__init__('test')
          self.itr = [1, 2, 3, 4, 5]
          for item in self.itr:
              self._graph = ControlMatplotlib(item)
              self.formset = [{
                                  'tab%s' %item:['_graph']
              }]

  if __name__ == "__main__":
      pyforms.start_app(test)

Конечным результатом является то, что он показывает только tab5 и соответствующий ему граф в окне. Есть ли способ исправить это, чтобы он отображал каждую вкладку и график, созданный в цикле for?

Обновление: так я разобрался, как сделать цикл для создания нескольких вкладок. Проблема, с которой я столкнулся сейчас, заключается в том, что на последней вкладке отображается только виджет управления Matplotlib. Я предполагаю, что что-то не так с циклом. Вот как выглядит код сейчас:

    import pyforms
    from pyforms import BaseWidget
    from pyforms.Controls import ControlButton
    from pyforms.Controls import ControlMatplotlib

    class test(BaseWidget):

        def __init__(self):

            super(test, self).__init__('test')
            self.formset = [{}]
            for i in range(0, 5):
                self._graph = ControlMatplotlib('%s' %i)
                self.formset[0]['tab%s' %i] = ['_graph']

    if __name__ == "__main__":
        pyforms.start_app(test)

Если у вас есть библиотека Pyforms и вы запустите этот код, она выдаст пять вкладок, но только на последней вкладке отобразится виджет Matplotlib. Я хотел бы найти способ исправить цикл, чтобы на всех вкладках отображался виджет Matplotlib.

0 ответов

Другие вопросы по тегам