我知道你可以使用for循环用matplotlib创建多个绘图,但你是否也可以使用循环将数字嵌入到gui中?

时间:2018-01-17 23:52:24

标签: python-3.x matplotlib embed pyforms

我只是想知道是否有办法创建一个嵌入式情节图循环。现在我使用for循环创建多个单独的绘图窗口。所以我希望我可以使用类似的for循环创建数字并将它们嵌入我正在制作的GUI中。如果有人熟悉Pyforms,有没有办法使用循环来制作相同类型的多个控件?

编辑:

对不起。让我澄清一下这个问题。我创建了一个程序,它从EIA API中获取数据,然后生成包含该数据的图形。到目前为止,我成功地使用了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中提取的每个系列的rawdata。循环还拉取并命名每个图形,并为每个拉出的系列标题。每个图形都是在一个单独的图形窗口中制作的,现在很好,但我想将这些图形中的每一个嵌入到我使用Pyforms库制作的GUI中。现在Pyforms与matplotlib兼容,甚至有自己的matplotlib数字小部件,但我无法弄清楚如何在循环中使用小部件。因此,我认为另一种方法是使用上述循环将每个图形嵌入到GUI中。我想知道这是否可行。      关于Pyforms,我试过测试你是否可以使用它提供的小部件循环。它似乎能够使用循环,但它只显示测试GUI中循环的最后一次迭代。我做的测试代码如下:

  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循环中生成的每个tab和graphwidget?

更新: 所以我想出了如何制作一个循环来生成多个标签。我现在遇到的问题是它只显示最后一个选项卡中的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 Widget。

0 个答案:

没有答案