Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在按键事件(Matplotlib和Python)后在打印循环中显示下一个打印_Python_Matplotlib_Canvas_Plot - Fatal编程技术网

仅在按键事件(Matplotlib和Python)后在打印循环中显示下一个打印

仅在按键事件(Matplotlib和Python)后在打印循环中显示下一个打印,python,matplotlib,canvas,plot,Python,Matplotlib,Canvas,Plot,下面的代码表示对应于n行文本文件读取的图形的打印。每行包含4列,前三列是(x,y,z)点的坐标,第四列是此打印不需要的二进制变量 在每读取20行时,将读取一个骨架,该骨架是一组20(x、y、z)个点或关节,每个关节由每行的前三列组成 该文本文件包含860行,860/20=43,即20个用于创建(x、y、z)关节骨架的关节数。然后,文本文件由43个骨架组成,生成一个运动。因此,文本文件表示移动 在骨架的打印中,仅使用两个坐标(x,y)生成二维骨架,因此忽略第三个坐标。而且,打印已经在循环中,但按键

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

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

该文本文件包含860行,860/20=43,即20个用于创建(x、y、z)关节骨架的关节数。然后,文本文件由43个骨架组成,生成一个运动。因此,文本文件表示移动

在骨架的打印中,仅使用两个坐标(x,y)生成二维骨架,因此忽略第三个坐标。而且,打印已经在循环中,但按键事件部分尚未实现,在当前画布关闭时打印下一个骨架

我在下面贴了两张连续两张画布的照片。在绘制画布2之前,必须先关闭画布1。我需要将该代码与按键事件相关联,例如:如果按下向右箭头键,则打印下一个骨架,否则,将永远不会显示下一个骨架,但无需关闭画布来打印下一个骨架

第一个绘图画布:

连续绘图的画布,在关闭第一个后显示:

守则:

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,您可以尝试使用python windows API来检测按键

pip安装pypiwin32

导入win32api
def按键(按键):
state=win32api.GetAsyncKeyState(ord(键))
如果(状态<0或状态==1):
返回真值

问题到底出在哪里?您是想学点什么,还是想找个人来完成任务?在前一种情况下,把你的任务分成几个小部分,看看你在哪里卡住了。在本例中,了解如何在按下matplotlib中的一个键时让某些事情发生(我想这可以用谷歌搜索)。接下来,了解如何更改代码以实现所发现的内容。如果有问题,试着解决它,或者在这里询问。实际上我使用的是Linux,Ubuntu16.04。Linux Ubuntu是否有等效的API?
import win32api

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