47
47
from FlashAir import card
48
48
import threading
49
49
import time
50
-
50
+ from QtGui import QScrollArea
51
+
52
+
53
+
54
+
55
+
56
+ class MyLabel (QtGui .QLabel ):
57
+
58
+ image = QtGui .QImage ();
59
+ def __init__ (self , parent = None ):
60
+ QtGui .QLabel .__init__ (self , parent )
61
+
62
+ def setImage (self , image ):
63
+ self .image = image ;
64
+ self .setPixmap (QtGui .QPixmap .fromImage (self .image ).scaled (self .size (), QtCore .Qt .KeepAspectRatio ))
65
+ pass
66
+
67
+ def resizeEvent (self , event ):
68
+ self .setPixmap (QtGui .QPixmap .fromImage (self .image ).scaled (event .size (), QtCore .Qt .KeepAspectRatio ))
69
+ pass
70
+
71
+ def imageSize (self ):
72
+ return self .image .size ()
73
+
74
+
75
+
76
+ class ScrollAreaEventHandler :
77
+ def handler (self , event , scrollarea ):
78
+ modifiers = QtGui .QApplication .keyboardModifiers ()
79
+ if modifiers != QtCore .Qt .ControlModifier :
80
+ QScrollArea .wheelEvent (scrollarea , event )
81
+ else :
82
+ event .ignore ()
83
+ pass
84
+
51
85
class ImageViewer (QtGui .QMainWindow ):
52
86
run = False ;
53
87
ReceiveThread = 0
@@ -59,8 +93,11 @@ class ImageViewer(QtGui.QMainWindow):
59
93
folder_local = '.'
60
94
recursive = False
61
95
96
+ saeh = ScrollAreaEventHandler ();
97
+
98
+
62
99
def __init__ (self ,ip = '192.168.0.1' ,port = 80 ,timeout = 1000 ,folder_local = '.' ,
63
- folder_remote = '/' , instant_run = False , recursive = False ):
100
+ folder_remote = '/' , instant_run = False , recursive = False , debug_image = None ):
64
101
super (ImageViewer , self ).__init__ ()
65
102
66
103
self .folder_local = folder_local
@@ -74,13 +111,15 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
74
111
75
112
self .scaleFactor = 0.0
76
113
77
- self .imageLabel = QtGui . QLabel ()
114
+ self .imageLabel = MyLabel ()
78
115
self .imageLabel .setBackgroundRole (QtGui .QPalette .Base )
79
116
self .imageLabel .setSizePolicy (QtGui .QSizePolicy .Ignored ,
80
117
QtGui .QSizePolicy .Ignored )
81
- self . imageLabel . setScaledContents ( True )
118
+
82
119
83
120
self .scrollArea = QtGui .QScrollArea ()
121
+
122
+ self .scrollArea .wheelEvent = lambda event : self .saeh .handler (event , self .scrollArea )
84
123
self .scrollArea .setBackgroundRole (QtGui .QPalette .Dark )
85
124
self .scrollArea .setWidget (self .imageLabel )
86
125
self .setCentralWidget (self .scrollArea )
@@ -97,6 +136,12 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
97
136
self .fitToWindowAct .setEnabled (True )
98
137
self .fitToWindowAct .setChecked (True )
99
138
139
+ if (debug_image != None ):
140
+ image = QtGui .QImage (debug_image )
141
+ self .emit (QtCore .SIGNAL ('load_image(QImage)' ), image )
142
+ return
143
+
144
+
100
145
if (instant_run ):
101
146
print ("Intant running..." )
102
147
threading .Thread (target = self .image_get ).start ()
@@ -129,6 +174,7 @@ def open(self):
129
174
"Cannot load %s." % fileName )
130
175
return
131
176
177
+
132
178
self .imageLabel .setPixmap (QtGui .QPixmap .fromImage (image ))
133
179
self .scaleFactor = 1.0
134
180
@@ -142,7 +188,9 @@ def open(self):
142
188
def load_image (self , image ):
143
189
print ("loading image ... " )
144
190
if not image .isNull ():
145
- self .imageLabel .setPixmap (QtGui .QPixmap .fromImage (image ))
191
+ self .printAct .setEnabled (True )
192
+ self .imageLabel .setImage (image )
193
+
146
194
self .fitToWindow ()
147
195
pass
148
196
@@ -170,6 +218,8 @@ def normalSize(self):
170
218
def fitToWindow (self ):
171
219
fitToWindow = self .fitToWindowAct .isChecked ()
172
220
self .scrollArea .setWidgetResizable (fitToWindow )
221
+
222
+
173
223
if not fitToWindow :
174
224
self .normalSize ()
175
225
@@ -222,7 +272,7 @@ def createActions(self):
222
272
def createMenus (self ):
223
273
self .fileMenu = QtGui .QMenu ("&File" , self )
224
274
#self.fileMenu.addAction(self.openAct)
225
- # self.fileMenu.addAction(self.printAct)
275
+ self .fileMenu .addAction (self .printAct )
226
276
self .fileMenu .addSeparator ()
227
277
self .fileMenu .addAction (self .exitAct )
228
278
@@ -247,15 +297,17 @@ def updateActions(self):
247
297
self .normalSizeAct .setEnabled (not self .fitToWindowAct .isChecked ())
248
298
249
299
def scaleImage (self , factor ):
250
- self .scaleFactor *= factor
251
- self .imageLabel .resize (self .scaleFactor * self .imageLabel .pixmap ().size ())
252
-
253
- self .adjustScrollBar (self .scrollArea .horizontalScrollBar (), factor )
254
- self .adjustScrollBar (self .scrollArea .verticalScrollBar (), factor )
255
-
256
- self .zoomInAct .setEnabled (self .scaleFactor < 3.0 )
257
- self .zoomOutAct .setEnabled (self .scaleFactor > 0.333 )
258
-
300
+ if not self .fitToWindowAct .isChecked ():
301
+ self .scaleFactor *= factor
302
+
303
+ self .imageLabel .resize (self .scaleFactor * self .imageLabel .imageSize ())
304
+
305
+ self .adjustScrollBar (self .scrollArea .horizontalScrollBar (), factor )
306
+ self .adjustScrollBar (self .scrollArea .verticalScrollBar (), factor )
307
+
308
+ self .zoomInAct .setEnabled (self .scaleFactor < 3.0 )
309
+ self .zoomOutAct .setEnabled (self .scaleFactor > 0.333 )
310
+
259
311
def adjustScrollBar (self , scrollBar , factor ):
260
312
scrollBar .setValue (int (factor * scrollBar .value ()
261
313
+ ((factor - 1 ) * scrollBar .pageStep ()/ 2 )))
@@ -265,4 +317,17 @@ def closeEvent(self, event):
265
317
print ("Close" )
266
318
self .runLock .release ()
267
319
self .run = 0
268
- pass
320
+ pass
321
+
322
+
323
+ def wheelEvent (self ,event ):
324
+ modifiers = QtGui .QApplication .keyboardModifiers ()
325
+ if modifiers == QtCore .Qt .ControlModifier :
326
+ if (event .delta () > 0 ):
327
+ self .zoomOut ()
328
+ else :
329
+ self .zoomIn ()
330
+ event .accept ()
331
+ else :
332
+ event .ignore ()
333
+
0 commit comments