30
30
import sys
31
31
32
32
from matplotlib .backends .qt_compat import QtCore , QtGui , QtWidgets
33
+ from matplotlib .backends .qt_compat import _enum , _exec
33
34
34
35
35
36
# matplotlib stores the baseline images under two separate subtrees,
@@ -61,13 +62,13 @@ def __init__(self, parent, index, name):
61
62
layout = QtWidgets .QVBoxLayout ()
62
63
63
64
label = QtWidgets .QLabel (name )
64
- label .setAlignment (QtCore .Qt .AlignHCenter |
65
- QtCore .Qt .AlignVCenter )
65
+ label .setAlignment (_enum ( ' QtCore.Qt.AlignmentFlag' ) .AlignHCenter |
66
+ _enum ( ' QtCore.Qt.AlignmentFlag' ) .AlignVCenter )
66
67
layout .addWidget (label , 0 )
67
68
68
69
self .image = QtWidgets .QLabel ()
69
- self .image .setAlignment (QtCore .Qt .AlignHCenter |
70
- QtCore .Qt .AlignVCenter )
70
+ self .image .setAlignment (_enum ( ' QtCore.Qt.AlignmentFlag' ) .AlignHCenter |
71
+ _enum ( ' QtCore.Qt.AlignmentFlag' ) .AlignVCenter )
71
72
self .image .setMinimumSize (800 // 3 , 600 // 3 )
72
73
layout .addWidget (self .image )
73
74
self .setLayout (layout )
@@ -85,7 +86,7 @@ def __init__(self, window):
85
86
self .window = window
86
87
87
88
def eventFilter (self , receiver , event ):
88
- if event .type () == QtCore .QEvent .KeyPress :
89
+ if event .type () == _enum ( ' QtCore.QEvent.Type' ) .KeyPress :
89
90
self .window .keyPressEvent (event )
90
91
return True
91
92
else :
@@ -125,8 +126,9 @@ def __init__(self, entries):
125
126
images_layout = QtWidgets .QVBoxLayout ()
126
127
images_box = QtWidgets .QWidget ()
127
128
self .image_display = QtWidgets .QLabel ()
128
- self .image_display .setAlignment (QtCore .Qt .AlignHCenter |
129
- QtCore .Qt .AlignVCenter )
129
+ self .image_display .setAlignment (
130
+ _enum ('QtCore.Qt.AlignmentFlag' ).AlignHCenter |
131
+ _enum ('QtCore.Qt.AlignmentFlag' ).AlignVCenter )
130
132
self .image_display .setMinimumSize (800 , 600 )
131
133
images_layout .addWidget (self .image_display , 6 )
132
134
images_box .setLayout (images_layout )
@@ -164,22 +166,25 @@ def set_entry(self, index):
164
166
for fname , thumbnail in zip (entry .thumbnails , self .thumbnails ):
165
167
pixmap = QtGui .QPixmap (os .fspath (fname ))
166
168
scaled_pixmap = pixmap .scaled (
167
- thumbnail .size (), QtCore .Qt .KeepAspectRatio ,
168
- QtCore .Qt .SmoothTransformation )
169
+ thumbnail .size (),
170
+ _enum ('QtCore.Qt.AspectRatioMode' ).KeepAspectRatio ,
171
+ _enum ('QtCore.Qt.TransformationMode' ).SmoothTransformation )
169
172
thumbnail .image .setPixmap (scaled_pixmap )
170
173
self .pixmaps .append (scaled_pixmap )
171
174
172
175
self .set_large_image (0 )
173
176
self .filelist .setCurrentRow (self .current_entry )
174
177
175
178
def set_large_image (self , index ):
176
- self .thumbnails [self .current_thumbnail ].setFrameShape (0 )
179
+ self .thumbnails [self .current_thumbnail ].setFrameShape (
180
+ _enum ('QtWidgets.QFrame.Shape' ).NoFrame )
177
181
self .current_thumbnail = index
178
182
pixmap = QtGui .QPixmap (os .fspath (
179
183
self .entries [self .current_entry ]
180
184
.thumbnails [self .current_thumbnail ]))
181
185
self .image_display .setPixmap (pixmap )
182
- self .thumbnails [self .current_thumbnail ].setFrameShape (1 )
186
+ self .thumbnails [self .current_thumbnail ].setFrameShape (
187
+ _enum ('QtWidgets.QFrame.Shape' ).Box )
183
188
184
189
def accept_test (self ):
185
190
entry = self .entries [self .current_entry ]
@@ -204,17 +209,17 @@ def reject_test(self):
204
209
self .set_entry (min ((self .current_entry + 1 ), len (self .entries ) - 1 ))
205
210
206
211
def keyPressEvent (self , e ):
207
- if e .key () == QtCore .Qt .Key_Left :
212
+ if e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_Left :
208
213
self .set_large_image ((self .current_thumbnail - 1 ) % 3 )
209
- elif e .key () == QtCore .Qt .Key_Right :
214
+ elif e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_Right :
210
215
self .set_large_image ((self .current_thumbnail + 1 ) % 3 )
211
- elif e .key () == QtCore .Qt .Key_Up :
216
+ elif e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_Up :
212
217
self .set_entry (max (self .current_entry - 1 , 0 ))
213
- elif e .key () == QtCore .Qt .Key_Down :
218
+ elif e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_Down :
214
219
self .set_entry (min (self .current_entry + 1 , len (self .entries ) - 1 ))
215
- elif e .key () == QtCore .Qt .Key_A :
220
+ elif e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_A :
216
221
self .accept_test ()
217
- elif e .key () == QtCore .Qt .Key_R :
222
+ elif e .key () == _enum ( ' QtCore.Qt.Key' ) .Key_R :
218
223
self .reject_test ()
219
224
else :
220
225
super ().keyPressEvent (e )
@@ -233,8 +238,8 @@ def __init__(self, path, root, source):
233
238
234
239
basename = self .diff [:- len ('-failed-diff.png' )]
235
240
for ext in exts :
236
- if basename .endswith ('_' + ext ):
237
- display_extension = '_' + ext
241
+ if basename .endswith (f'_ { ext } ' ):
242
+ display_extension = f'_ { ext } '
238
243
extension = ext
239
244
basename = basename [:- 4 ]
240
245
break
@@ -244,11 +249,10 @@ def __init__(self, path, root, source):
244
249
245
250
self .basename = basename
246
251
self .extension = extension
247
- self .generated = basename + '.' + extension
248
- self .expected = basename + '-expected.' + extension
249
- self .expected_display = (basename + '-expected' + display_extension +
250
- '.png' )
251
- self .generated_display = basename + display_extension + '.png'
252
+ self .generated = f'{ basename } .{ extension } '
253
+ self .expected = f'{ basename } -expected.{ extension } '
254
+ self .expected_display = f'{ basename } -expected{ display_extension } .png'
255
+ self .generated_display = f'{ basename } { display_extension } .png'
252
256
self .name = self .reldir / self .basename
253
257
self .destdir = self .get_dest_dir (self .reldir )
254
258
@@ -277,7 +281,7 @@ def get_dest_dir(self, reldir):
277
281
path = self .source / baseline_dir / reldir
278
282
if path .is_dir ():
279
283
return path
280
- raise ValueError ("Can't find baseline dir for {}" . format ( reldir ) )
284
+ raise ValueError (f "Can't find baseline dir for { reldir } " )
281
285
282
286
@property
283
287
def display (self ):
@@ -292,7 +296,7 @@ def display(self):
292
296
'autogen' : '\N{WHITE SQUARE CONTAINING BLACK SMALL SQUARE} ' ,
293
297
}
294
298
box = status_map [self .status ]
295
- return '{ } {} [{}]' . format ( box , self .name , self . extension )
299
+ return f' { box } { self . name } [{ self .extension } ]'
296
300
297
301
def accept (self ):
298
302
"""
@@ -305,7 +309,9 @@ def reject(self):
305
309
"""
306
310
Reject this test by copying the expected result to the source tree.
307
311
"""
308
- copy_file (self .dir / self .expected , self .destdir / self .generated )
312
+ expected = self .dir / self .expected
313
+ if not expected .is_symlink ():
314
+ copy_file (expected , self .destdir / self .generated )
309
315
self .status = 'reject'
310
316
311
317
@@ -339,7 +345,7 @@ def launch(result_images, source):
339
345
dialog .show ()
340
346
filter = EventFilter (dialog )
341
347
app .installEventFilter (filter )
342
- sys .exit (app . exec_ ( ))
348
+ sys .exit (_exec ( app ))
343
349
344
350
345
351
if __name__ == '__main__' :
0 commit comments