4747from FlashAir import card
4848import threading
4949import 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+
5185class ImageViewer (QtGui .QMainWindow ):
5286 run = False ;
5387 ReceiveThread = 0
@@ -59,8 +93,11 @@ class ImageViewer(QtGui.QMainWindow):
5993 folder_local = '.'
6094 recursive = False
6195
96+ saeh = ScrollAreaEventHandler ();
97+
98+
6299 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 ):
64101 super (ImageViewer , self ).__init__ ()
65102
66103 self .folder_local = folder_local
@@ -74,13 +111,15 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
74111
75112 self .scaleFactor = 0.0
76113
77- self .imageLabel = QtGui . QLabel ()
114+ self .imageLabel = MyLabel ()
78115 self .imageLabel .setBackgroundRole (QtGui .QPalette .Base )
79116 self .imageLabel .setSizePolicy (QtGui .QSizePolicy .Ignored ,
80117 QtGui .QSizePolicy .Ignored )
81- self . imageLabel . setScaledContents ( True )
118+
82119
83120 self .scrollArea = QtGui .QScrollArea ()
121+
122+ self .scrollArea .wheelEvent = lambda event : self .saeh .handler (event , self .scrollArea )
84123 self .scrollArea .setBackgroundRole (QtGui .QPalette .Dark )
85124 self .scrollArea .setWidget (self .imageLabel )
86125 self .setCentralWidget (self .scrollArea )
@@ -97,6 +136,12 @@ def __init__(self,ip='192.168.0.1',port=80,timeout=1000,folder_local='.',
97136 self .fitToWindowAct .setEnabled (True )
98137 self .fitToWindowAct .setChecked (True )
99138
139+ if (debug_image != None ):
140+ image = QtGui .QImage (debug_image )
141+ self .emit (QtCore .SIGNAL ('load_image(QImage)' ), image )
142+ return
143+
144+
100145 if (instant_run ):
101146 print ("Intant running..." )
102147 threading .Thread (target = self .image_get ).start ()
@@ -129,6 +174,7 @@ def open(self):
129174 "Cannot load %s." % fileName )
130175 return
131176
177+
132178 self .imageLabel .setPixmap (QtGui .QPixmap .fromImage (image ))
133179 self .scaleFactor = 1.0
134180
@@ -142,7 +188,9 @@ def open(self):
142188 def load_image (self , image ):
143189 print ("loading image ... " )
144190 if not image .isNull ():
145- self .imageLabel .setPixmap (QtGui .QPixmap .fromImage (image ))
191+ self .printAct .setEnabled (True )
192+ self .imageLabel .setImage (image )
193+
146194 self .fitToWindow ()
147195 pass
148196
@@ -170,6 +218,8 @@ def normalSize(self):
170218 def fitToWindow (self ):
171219 fitToWindow = self .fitToWindowAct .isChecked ()
172220 self .scrollArea .setWidgetResizable (fitToWindow )
221+
222+
173223 if not fitToWindow :
174224 self .normalSize ()
175225
@@ -222,7 +272,7 @@ def createActions(self):
222272 def createMenus (self ):
223273 self .fileMenu = QtGui .QMenu ("&File" , self )
224274 #self.fileMenu.addAction(self.openAct)
225- # self.fileMenu.addAction(self.printAct)
275+ self .fileMenu .addAction (self .printAct )
226276 self .fileMenu .addSeparator ()
227277 self .fileMenu .addAction (self .exitAct )
228278
@@ -247,15 +297,17 @@ def updateActions(self):
247297 self .normalSizeAct .setEnabled (not self .fitToWindowAct .isChecked ())
248298
249299 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+
259311 def adjustScrollBar (self , scrollBar , factor ):
260312 scrollBar .setValue (int (factor * scrollBar .value ()
261313 + ((factor - 1 ) * scrollBar .pageStep ()/ 2 )))
@@ -265,4 +317,17 @@ def closeEvent(self, event):
265317 print ("Close" )
266318 self .runLock .release ()
267319 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