This Python 3.12 code on Ubuntu 22.04 behaves as expected, except when I press q
or ESC
key to quit. Here is the code:
<code>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
</code>
<code>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
</code>
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
When I set a breakpoint at step 1
, start debugging with VS Code and press q
or ESC
key, the control goes to step 1
, step 2
and then, unexpectedly, to step 3
and step 4
. I expected 1, 2 and 4 sequence.