我有以下代码,它采用对象列表,并且每个对象从存储在对象中的数据中绘制图形:
def Plot(self, *figures , wait = True):
def plot(fig,n):
fig.fig = plt.figure(n)
print("Ploting figure {} for file {}\n".format(n,fig.name))
fig.Plot()
plt.show()
if wait:
input("Press Enter to continue to next figure")
if not figures:
figures = self.figures
for n,fig in figures.items():
plot(fig,n)
else:
for n,fig in enumerate(figures):
plot(fig,n)
fig.Plot()是处理绘图的函数。运行' Plot'时,会在循环的每次迭代中生成一个数字,但实际绘图仅在循环结束后才会生成。
我想要实现的是,在每次迭代时,生成图形并绘制绘图,然后再继续下一次迭代。
答案 0 :(得分:0)
经过一些谷歌搜索后,我找到了一个解决方案:physicalmodelingwithpython.blogspot.co.il/2015/07 / ...其中的行:“if wait:input(”按Enter继续下一个数字“)”应该被替换with:“while True:if plt.waitforbuttonpress():break”
plt.waitforbuttonpress()返回True是按键是按下,如果按下鼠标按钮则返回False,允许在函数中停止循环并返回控制台。
我添加了关键字'Startat',以便稍后从列表中的下一个图中恢复(这也可以通过合适的装饰器完成)。
可以使用python事件处理例程来实现更优雅的解决方案,其中我和John Snow一样了解。
完整功能(某些关键字与原始问题无关):
def Plot(self, figures=None, wait=True, Save=False, Legendtitle=False, Startat=0):
def plot(fig, n):
print("Ploting figure {} for file {}\n".format(n, fig.name))
fig.Plot(Legendtitle)
if Save:
fig.SavePlot()
if wait:
while True:
if plt.waitforbuttonpress():
break
else:
return True
if not figures:
figures = self.figures
for n, fig in figures.items():
if n>= Startat:
if plot(fig, n):
break
else:
for n, fig in enumerate(figures):
if n>= Startat:
if plot(fig, n):
break