Неожиданный поток управления в этом коде Python с MatplotlibPython

Программы на Python
Anonymous
Неожиданный поток управления в этом коде Python с Matplotlib

Сообщение Anonymous »

Этот код Python 3.12 в Ubuntu 22.04 ведет себя так, как и ожидалось, за исключением случаев, когда я нажимаю клавишу q или ESC для выхода. Вот код:

Код: Выделить всё

import numpy as np, matplotlib.pyplot as plt
from pathlib import Path
from collections import namedtuple
from skimage.io import imread
from matplotlib.widgets import Slider

def update(u):
global minR, minG, minB

minR = sliderR.val
minG = sliderG.val
minB = sliderB.val

axImg.imshow(img)
plt.title(f'iFile {iFile}/{len(files)-1}')
plt.show() #----------------------------------------- step 3

def onpress(event):
global files, iFile, iStart, iEnd, img

match event.key:
case 'q' | 'escape':
plt.close() #------------------------------------- step 1
return #------------------------------------------ step 2
case 'pageup' | 'pagedown' as incr:
if incr == 'pagedown':
iFile = min(iFile+1, len(files)-1)
else:
iFile = max(iFile-1, 0)
case 'o':
path = Path('/home/paul/downloads/fig-0.png')
files = [f for f in Path(path.parent).glob('*.png')]
files.sort()
iFile = files.index(path)
iStart, iEnd = 0, np.inf

img = imread(files[iFile])
update(None)

nRows, nCols = 20, 15
fig = plt.figure(figsize=(12, 14))
axImg = plt.subplot2grid((nRows, nCols), (0, 0), rowspan=nRows-4, colspan=nCols)
axR = plt.subplot2grid((nRows, nCols), (nRows-3, 1), colspan=nCols-2)
axG = plt.subplot2grid((nRows, nCols), (nRows-2, 1), colspan=nCols-2)
axB = plt.subplot2grid((nRows, nCols), (nRows-1, 1), colspan=nCols-2)
sliderR = Slider(ax=axR, label='R', valmin=0, valmax=255, valinit=128, valstep=4)
sliderG = Slider(ax=axG, label='G', valmin=0, valmax=255, valinit=128, valstep=4)
sliderB = Slider(ax=axB, label='B', valmin=0, valmax=255, valinit=128, valstep=4)
sliderR.on_changed(update)
sliderG.on_changed(update)
sliderB.on_changed(update)
fig.canvas.mpl_connect('key_press_event', onpress)
plt.get_current_fig_manager().full_screen_toggle()
onpress(namedtuple('T', ['key'])('o')) #------------------- step 4
Когда я устанавливаю точку останова на шаге 1, начинаю отладку с помощью VS Code и нажимаю клавишу q или ESC, управление переходит к шагу 1 , шаг 2, а затем, неожиданно, шаг 3 и шаг 4. Я ожидал последовательность 1, 2 и 4.

Подробнее здесь: https://stackoverflow.com/questions/788 ... matplotlib

Вернуться в «Python»