Обновите и закройте график, обнаружив нажатой клавишу - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть простой цикл построения данных, считываемых из папки.Он зацикливается навсегда, чтобы обновить графики, и я хочу завершить программу, когда нажимаю ESC.До сих пор я писал

fig = plt.figure()
plt.axes()

while True:
    ... # loop over data and plot
    plt.draw()
    plt.waitforbuttonpress(0)
    plt.cla()

Если я закрою фигуру нажатием на значок X, программа завершится с ошибкой.Я могу избежать ошибки, выполнив

    try:
        plt.waitforbuttonpress(0)
    except:
        break

Но я все же хотел бы иметь возможность завершить программу, нажав ESC на графике.Кроме того, если я закрою график с помощью CTRL + W, график снова появится.Я попытался добавить обнаружение событий, например

def parse_esc(event):
    if event.key == 'press escape':
        sys.exit(0)
fig.canvas.mpl_connect('key_press_event', parse_esc)

, но оно не обнаруживает ESC.Я попытался использовать close_event вместо key_press_event, но sys.exit(0) выдает следующую ошибку

    while executing
"140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??"
    invoked from within
"if {"[140506996271368filter_destroy 836 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 0 ?? ?? .140506996230464 17 ?? ?? ??]" == "break"} break"
    (command bound to event)

Я также хотел бы удалить цикл и обновить график только в случае обнаружения R, но это не такважно.

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 08 апреля 2019

Если кому-то понадобится сделать что-то подобное, вот что я сделал

folder = ...

def update():
    plt.cla()
    for f in os.listdir(folder):
        if f.endswith(".dat"):
            data = ... 
            plt.plot(data)
    plt.draw()
    print('refreshed')

def handle(event):
    if event.key == 'r':
        update()
    if event.key == 'escape':
        sys.exit(0)

fig = plt.figure()
plt.axes()
picsize = fig.get_size_inches() / 1.3
fig.set_size_inches(picsize)
fig.canvas.mpl_connect('key_press_event', handle)
update()

input('')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...