使用用户输入在每个周期显示更改矩阵

时间:2017-10-13 09:45:19

标签: python video matplotlib matrix stream

我有一个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是一些返回正确维度矩阵的任意函数

但是这里的一个大问题是每次我想要获得新的用户输入然后显示更新的矩阵时我必须关闭图形窗口。

如何更新每个用户输入迭代显示的矩阵,而无需关闭程序进度窗口?

1 个答案:

答案 0 :(得分:0)

由于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 ,则会在现有图中显示一个新的随机矩阵。