2017-02-17 6 views
0

Я рисую несколько цифр один за другим (закрывая окна, чтобы увидеть следующий), но мне нужен способ прервать цикл и завершить скрипт, нажав клавишу (Например, «Esc»).Цикл прерывания цикла в Matplotlib, нажимая клавишу

Я пытаюсь использовать mscrt.getch(), но не работает, любые советы будут оценены.

Ядром цикл что-то вроде этого:

for i, _ in enumerate(ID_SECTION): 
    FIG = plt.figure(
      num=ID_SECTION[i], 
      figsize=(10, 7.5), 
      facecolor='w' 
     ) 
    curve = FIG.add_subplot(
      1, 2, 1, 
      adjustable='box', 
      aspect='equal' 
     ) 
    curve.scatter(x, y) 
    plt.show() 
    plt.close('all') 

ответ

0

Если вы не возражаете, нажав на кнопку «войти» каждый цикл, чтобы сказать цикл, чтобы продолжить, вы можете добавить что-то вроде этого в конце вашего цикла :

r = input("Continue [y]/n?") 
if r == 'n': 
    break 

в противном случае, я думаю, вы должны добавить keypress callback ваши фигуры. Исходя из этого примера, что-то подобное может работать:

from __future__ import print_function 
import numpy as np 
import matplotlib.pyplot as plt 

run = True 

def press(event): 
    global run 
    if event.key == 'escape': 
     run = False 

Затем добавить к вашей петле:

FIG.canvas.mpl_connect('key_press_event', press) 
if not run: 
    break 

Хотя, я не уверен, что добавление обратного вызова цикла, который создает фигуры является хорошая идея. Вероятно, лучше создать одну фигуру и добавить к ней обратный вызов, затем добавить паузу или что-то еще, чтобы вы могли видеть, что фигура создает каждый цикл. Но, если вы собираетесь это сделать, первое решение input, вероятно, все равно лучше.

Также обратите внимание, что я использовал global в последнем решении, которое является generally frowned upon.