我只是想知道是否有办法创建一个嵌入式情节图循环。现在我使用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。