显示与用户输入的每一个周期
问题描述:
我有一个Python脚本,其中我想显示一个新的随机矩阵,在象视频流中的当前窗口改变矩阵,每次用户输入字符“P”显示与用户输入的每一个周期
import pylab as plt
plt.figure()
matrix = np.zeros((size[0],size[1]))
plt.matshow(matrix)
plt.show()
while(1):
cmd = raw_input('...')
if(raw_input == 'p'):
matrix = get_rand_mat()
plt.matshow(matrix)
plt.show()
哪里get_rand_mat
一些arbitary函数返回正确的尺寸
但这里的大问题的矩阵是,我不得不关闭图形窗口每次我想获得新用户的输入,然后显示更新的矩阵。
如何更新每个用户输入迭代的显示矩阵,而无需关闭窗口以便程序进度?
答
由于matplotlib绘图窗口接管事件循环,因此在窗口打开时控制台的输入是不可能的。
尽管可以使用交互模式(plt.ion()
),但这可能会导致其他问题。所以我的建议是完全在一个现有的数字中工作,并将一个事件连接到按键p。
import matplotlib.pyplot as plt
import numpy as np
size= (25,25)
get_rand_mat = lambda : np.random.rand(*size)
fig = plt.figure()
matrix = np.zeros((size[0],size[1]))
mat = plt.matshow(matrix, fignum=0, vmin=0, vmax=1)
def update(event):
if event.key == "p":
matrix = get_rand_mat()
mat.set_data(matrix)
fig.canvas.draw_idle()
fig.canvas.mpl_connect("key_press_event", update)
plt.show()
如果运行上面并按p,一个新的随机矩阵在现有图内示出。