diff options
Diffstat (limited to 'python/pyqt/examples3/qmag.py')
-rwxr-xr-x | python/pyqt/examples3/qmag.py | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/python/pyqt/examples3/qmag.py b/python/pyqt/examples3/qmag.py deleted file mode 100755 index 6a136481..00000000 --- a/python/pyqt/examples3/qmag.py +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/bin/env python - -#**************************************************************************** -#** $Id$ -#** -#** Copyright (C) 1992-1998 Troll Tech AS. All rights reserved. -#** -#** This file is part of an example program for PyQt. This example -#** program may be used, distributed and modified without limitation. -#** -#*****************************************************************************/ - -import sys -from qt import * - -TRUE = 1 -FALSE = 0 - -zoomfactors = ["100%","200%","300%","400%","500%","600%","700%","800%","1600%"] - -refreshrates = [ - "No autorefresh", "50 per second", "4 per second", "3 per second", - "2 per second", "Every second", "Every two seconds", "Every three seconds", - "Every five seconds", "Every ten seconds"] - -timer = (0, 20, 250, 333, 500, 1000, 2000, 3000, 5000, 10000) - -class MagWidget(QWidget): - def __init__(self, qApp, parent = None, name = None): - self.qApp = qApp - QWidget.__init__(self, parent, name) - self.pm = QPixmap() # pixmap magnified - self.p = QPixmap() # pixmap - self.image = QImage() # image of pixmap (for RGB) - self.z = 0 # zoom factor - self.r = 0 # autorefresh rate (index into refreshrates) - self.grabbing = FALSE # TRUE if currently grabbing - self.grabx = -1 - self.graby = -1 - - self.zoom = QComboBox(FALSE, self) - self.zoom.insertStrList(zoomfactors, len(zoomfactors)) - self.connect(self.zoom, SIGNAL("activated(int)"), - self.setZoom) - - self.refresh = QComboBox(FALSE, self) - self.refresh.insertStrList(refreshrates, len(refreshrates)) - self.connect(self.refresh, SIGNAL("activated(int)"), - self.setRefresh) - - x = 0 - w = 0 - h = 20 - for s in zoomfactors: - cw = self.zoom.fontMetrics().width(s) - w = max(cw, w) - self.zoom.setGeometry(x, 2, w + 30, h) - - x = w + 34 - w = 0 - for s in refreshrates: - cw = self.refresh.fontMetrics().width(s) - w = max(cw, w) - self.refresh.setGeometry(x, 2, w + 30, h) - - self.saveButton = QPushButton(self) - self.connect(self.saveButton, SIGNAL("clicked()"), self.save) - self.saveButton.setText("Save") - self.saveButton.setGeometry(x + w + 30 + 2, 2, - 10 + self.saveButton.fontMetrics().width("Save"), h) - - self.quitButton = QPushButton(self) - self.connect(self.quitButton, SIGNAL("clicked()"), self.qApp, SLOT("quit()")) - self.quitButton.setText("Quit") - self.quitButton.setGeometry(self.saveButton.geometry().right() + 2, 2, - 10 + self.quitButton.fontMetrics().width("Quit"), h) - - self.rgb = QLabel(self) - self.rgb.setText("") - self.rgb.setAlignment(Qt.AlignVCenter) - self.rgb.resize(self.width(), self.rgb.fontMetrics().height() + 4) - - self.yoffset = self.zoom.height() + 4 + self.rgb.height() - self.setMinimumSize(self.quitButton.geometry().topRight().x() + 2, - self.yoffset + 20) - w = self.quitButton.geometry().topRight().x() + 2 - self.resize(w, w) - - self.setMouseTracking(TRUE) - self.grabx = self.qApp.desktop().width() / 2 - self.graby = self.qApp.desktop().height() / 2 - self.grabAround(QPoint(self.grabx, self.graby)) - - #self.zoom.setCurrentItem(1) # grabAround sets zoom factor - #self.setZoom(1) - self.refresh.setCurrentItem(5) - self.setRefresh(5) - - def setZoom(self, index): - if index == 8: - self.z = 16 - else: - self.z = index + 1 - self.grab() - - def setRefresh(self, index): - self.r = index - self.killTimers() - if index and not self.grabbing: - #print "st:", timer[index] - self.startTimer(timer[index]) - - def save(self): - if not self.p.isNull(): - self.killTimers() - fn = QFileDialog.getSaveFileName() - if not fn.isEmpty(): - self.p.save(fn, "BMP") - if self.r: - self.startTimer(timer[self.r]) - - def grab(self): - if not self.isVisible() or self.grabx < 0 or self.graby < 0: - return - - w = (self.width() + self.z - 1) / self.z - h = (self.height() + self.z - 1 - self.yoffset) / self.z - - if w < 1 or h < 1: - return - - x = self.grabx - w / 2 - y = self.graby - h / 2 - - if x + w > QApplication.desktop().width(): - x = QApplication.desktop().width() - w - elif x < 0: - x = 0 - - if y + h > QApplication.desktop().height(): - y = QApplication.desktop().height() - h - elif y < 0: - y = 0 - - self.p = QPixmap.grabWindow(QApplication.desktop().winId(), x, y, w, h) - self.image = self.p.convertToImage() - m = QWMatrix() - #print "z:", self.z - m.scale(float(self.z), float(self.z)) - self.pm = self.p.xForm(m) - self.repaint(FALSE) - - def paintEvent(self, e): - if not self.pm.isNull(): - paint = QPainter(self) - paint.drawPixmap(0, self.zoom.height() + 4, self.pm, - 0, 0, self.width(), self.height() - self.yoffset) - - def mousePressEvent(self, e): - if not self.grabbing: - self.grabbing = TRUE - self.killTimers() - self.grabMouse(Qt.crossCursor) - self.grabx = -1 - self.graby = -1 - else: - self.grabx = self.mapToGlobal(e.pos()).x() - self.graby = self.mapToGlobal(e.pos()).y() - - def mouseReleaseEvent(self, e): - if self.grabbing and self.grabx >= 0 and self.graby >= 0: - self.grabbing = FALSE - self.grabAround(e.pos()) - self.releaseMouse() - - def grabAround(self, pos): - rx = self.mapToGlobal(pos).x() - ry = self.mapToGlobal(pos).y() - w = abs(rx - self.grabx) - h = abs(ry - self.graby) - if w > 10 and h > 10: - pz = 1 - while w*pz*h*pz < self.width()*(self.height()-self.yoffset) and \ - w*pz < QApplication.desktop().width() and \ - h*pz < QApplication.desktop().height(): - pz += 1 - if (w*pz*h*pz - self.width()*(self.height()-self.yoffset)) > \ - (self.width()*(self.height()-self.yoffset) - w*(pz-1)*h*(pz-1)): - pz -= 1 - if pz < 1: - pz = 1 - elif pz > 8: - pz = 8 - self.zoom.setCurrentItem(pz-1) - self.z = pz - self.grabx = min(rx, self.grabx) + w / 2 - self.graby = min(ry, self.graby) + h / 2 - #self.resize(w*self.z, h*self.z*self.yoffset) - self.grab() - - def mouseMoveEvent(self, e): - if self.grabbing or self.pm.isNull() or \ - e.pos().y() > self.height() - self.zoom.fontMetrics().height() - 4 or \ - e.pos().y() < self.zoom.height() + 4: - self.rgb.setText("") - else: - x = e.pos().x() / self.z - y = (e.pos().y() - self.zoom.height() - 4) / self.z - pixelinfo = "" - if self.image.valid(x, y): - px = self.image.pixel(x, y) - pixelinfo = "%3d,%3d,%3d #%02x%02x%02x" % ( - qRed(px), qGreen(px), qBlue(px), - qRed(px), qGreen(px), qBlue(px)) - self.rgb.setText("x=%d, y=%d %s" % \ - (x + self.grabx, y + self.graby, pixelinfo)) - - def focusOutEvent(self, e): - self.rgb.setText("") - - def timerEvent(self, e): - self.grab() - - def resizeEvent(self, e): - self.rgb.setGeometry(0, self.height() - self.rgb.height(), - self.width(), self.rgb.height()) - -if __name__=='__main__': - app = QApplication( sys.argv ) - m = MagWidget(app) - app.setMainWidget(m) - m.show() - app.exec_loop() |