为什么仅在按键事件(Matplotlib和Python)之后,才在绘图循环中显示下一个情节?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (398)

下面的代码表示对应于读取n行文本文件的图形的绘图。每一行包含4列,前三列是(x,y,z)点的坐标,第四列是这个绘图所不需要的二进制变量。

在每读20行时,读取一个骨架,这个骨架是由20个(x,y,z)点或关节组成的组,每个节点由每一行的前三列组成。

文本文件包含860行,860/20=43,是创建(x,y,z)连接骨架的连接数。然后,文本文件由43个骨架组成,从而产生一个运动。因此,文本文件表示运动

在骨架的绘制中,只取两个坐标(x,y)来生成二维骨架,因此忽略了第三个坐标。而且,绘图已经在一个循环中,但是键按事件部分尚未实现,当前画布关闭时,将绘制下一个框架。

我在下面贴了两张连续两张画布的照片。画布一在画布二绘制之前必须关闭。我需要将该代码与键按事件相关联,例如:如果按下正确的箭头键,则绘制下一个骨架,否则将永远不会显示下一个框架,但不一定需要画下一幅画的画布。

第一个情节画布:https:/i.stack.imgur.com/XxsNZ.png

连续情节的画布,在结束第一个之后显示:https:/i.stack.imgur.com/a1P8L.png

代码如下:

import matplotlib.pyplot as plt
import numpy as np

movement = np.loadtxt("file01.txt")
bone_list = [[1, 3], [2, 3], [3, 4], [4, 7], [5, 7], [6, 7], [1, 8], [2, 9], [8, 10], [9,     11], [10, 12], [11, 13], [5, 14], [6, 15], [14,     16], [15, 17], [16, 18], [17, 19], [3, 20]]
bone_list = np.array(bone_list) - 1
number_of_postures = int(len(movement)/20)

for i in range(number_of_postures):
  fig, ax = plt.subplots(1, figsize=(3, 8))
  plt.title('Skeleton')
  plt.xlim(100, 180)
  plt.ylim(-250, 0)
  skeleton = movement[i*20:(i+1)*20]
  x = skeleton[:, 0]
  y = -skeleton[:, 1]
  sc = ax.scatter(x, y, s=40)
  for bone in bone_list:
     ax.plot([x[bone[0]], x[bone[1]]],  [y[bone[0]], y[bone[1]]], 'r')
plt.show()
提问于
用户回答回答于

如果你使用的是windows,你可以尝试使用pythonWindowsAPI来检测按键。

PIP安装pypiwin 32

import win32api

def keypress(key):
    state = win32api.GetAsyncKeyState(ord(key))
    if(state < 0 or state == 1):
        return True

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问19 回答
  • 学生

    3 粉丝476 提问13 回答
  • uncle_light

    5 粉丝518 提问12 回答
  • 最爱开车啦

    8 粉丝503 提问12 回答

扫码关注云+社区

领取腾讯云代金券