def __init__(self, args): QMainWindow.__init__(self) self.setWindowIcon(ImageDiffIcon) self.imageFolder = "" self.pm1 = self.pm2 = self.pm3 = None self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle(title) self.settings = QSettings("TestPlant", "imageDiff") self.readSettings() self.ui.splitter.setChildrenCollapsible(False) self.scene = Scene(self) self.ui.graphicsView.setScene(self.scene) self.installEventFilter(self) self.ui.actionClearImages.setIcon(deleteIcon16) self.ui.actionOpenImages.setIcon(addIcon16) self.ui.actionClearImages.triggered.connect(self.clearImages) self.ui.actionOpenImages.triggered.connect(self.openFiles) self.ui.actionAbout.triggered.connect(self.about) self.ui.actionUser_Guide.triggered.connect(self.usage) self.ui.actionIgnore_Transparent_Pixels.triggered.connect(self.showOverlay) self.ui.actionExit.triggered.connect(self.close) self.connect(self.ui.scale_Slider, QtCore.SIGNAL("valueChanged(int)"), self.showImages) self.connect(self.ui.tolerance_le, QtCore.SIGNAL("editingFinished()"), self.showOverlay) self.ui.image1_title_te.setStyleSheet("background-color: transparent;") self.ui.image2_title_te.setStyleSheet("background-color: transparent;") self.ui.compare_title_te.setStyleSheet("background-color: transparent;") if args: self.scene.addImageFiles(args) QTimer.singleShot(2000, self.checkForNewVersion)
#-*- coding:utf-8 -*- import sys import os from globaltool import * from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5.uic.properties import QtGui from ui.Ui_mainWindow import Ui_MainWindow from Event_mainWindows import Event_mainWindow if __name__ == '__main__': #初始化环境变量 cfenv.initEnvData() print("Bin:" + cfenv.binDir) print("Data:" + cfenv.dataDir) print("dbPlugin:" + cfenv.dbPluginDir) print("scriptEnv:" + cfenv.scriptEnvDir) print("script:" + cfenv.scriptDir) print("attach:" + cfenv.attachDir) print("configFile:" + cfenv.configFilePath) print("backupConfigFile:" + cfenv.backupConfigFilePath) print("templeteScriptFile:" + cfenv.templeteScriptFile) #启动程序 app = QApplication(sys.argv) MainWindow = QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) uiEvent = Event_mainWindow() uiEvent.setMainEvent(MainWindow,ui) MainWindow.show() sys.exit(app.exec_())
class ImageDiff(QMainWindow): def __init__(self, args): QMainWindow.__init__(self) self.setWindowIcon(ImageDiffIcon) self.imageFolder = "" self.pm1 = self.pm2 = self.pm3 = None self.ui = Ui_MainWindow() self.ui.setupUi(self) self.setWindowTitle(title) self.settings = QSettings("TestPlant", "imageDiff") self.readSettings() self.ui.splitter.setChildrenCollapsible(False) self.scene = Scene(self) self.ui.graphicsView.setScene(self.scene) self.installEventFilter(self) self.ui.actionClearImages.setIcon(deleteIcon16) self.ui.actionOpenImages.setIcon(addIcon16) self.ui.actionClearImages.triggered.connect(self.clearImages) self.ui.actionOpenImages.triggered.connect(self.openFiles) self.ui.actionAbout.triggered.connect(self.about) self.ui.actionUser_Guide.triggered.connect(self.usage) self.ui.actionIgnore_Transparent_Pixels.triggered.connect(self.showOverlay) self.ui.actionExit.triggered.connect(self.close) self.connect(self.ui.scale_Slider, QtCore.SIGNAL("valueChanged(int)"), self.showImages) self.connect(self.ui.tolerance_le, QtCore.SIGNAL("editingFinished()"), self.showOverlay) self.ui.image1_title_te.setStyleSheet("background-color: transparent;") self.ui.image2_title_te.setStyleSheet("background-color: transparent;") self.ui.compare_title_te.setStyleSheet("background-color: transparent;") if args: self.scene.addImageFiles(args) QTimer.singleShot(2000, self.checkForNewVersion) def about(self): QtGui.QMessageBox.about(self, title, "%s by TestPlant\nVersion %s"%(title, _version)) def usage(self): QtGui.QMessageBox.about(self, "Usage", "Add files from the file menu, or by drag and drop.\n\n" + "Move images using the mouse or the keyboard cursor keys.\n\n" + "The overlapping regions of two images are shown in the lower windows.\n\n" + "The discrepancy is the count and percentage of different pixels.\n\n" + "Tolerance is the maximum allowed difference in each RGB value of a pixel.\nSet one integer for all colors or 3 for red green and blue.\n\n" + "Ignoring transparency is set in the options menu.\n\n" "Right-click an image to change the overlap order or remove.") def getTolerance(self): try: s = str(self.ui.tolerance_le.text()) if not s: return (0,0,0) tolerances = map(lambda t: int(t), s.split()) if len(tolerances) == 1: return (tolerances[0], tolerances[0], tolerances[0]) elif len(tolerances) != 3: raise except: QtGui.QMessageBox.warning(self, title, "Tolerance must be an integer or 3 space separated integers for RGB") tolerances = (0,0,0) return tolerances def showOverlay(self): self.scene.showOverlay() def clearImages(self): self.scene.clear() self.ui.image1_lbl.clear() self.ui.image2_lbl.clear() self.ui.overlay_lbl.clear() self.pm1 = self.pm2 = self.pm3 = None self.ui.image1_title_te.clear() self.ui.image2_title_te.clear() self.ui.compare_title_te.clear() def showImages(self): self.scaleImage(self.ui.image1_lbl, self.pm1) self.scaleImage(self.ui.image2_lbl, self.pm2) self.scaleImage(self.ui.overlay_lbl, self.pm3) def scaleImage(self, lbl, pm): if pm: lbl.setPixmap(pm.scaled(pm.width() * self.ui.scale_Slider.value(), pm.height() * self.ui.scale_Slider.value(), QtCore.Qt.KeepAspectRatio)) def openFiles(self): filePaths = QtGui.QFileDialog.getOpenFileNames(self, "Select images", self.imageFolder, 'image files (*.png *.tiff *.bmp);;*.*') if filePaths: self.scene.addImageFiles(filePaths) self.imageFolder = os.path.dirname(unicode(filePaths[0])) def eventFilter(self, object, event): if event.type() == 2113: self.scene.removeNode() return True return False def closeEvent(self, e): self.saveSettings() e.accept() def saveSettings(self): self.settings.setValue('imageFolder', self.imageFolder) self.settings.setValue('ignoreAlpha', self.ui.actionIgnore_Transparent_Pixels.isChecked()) self.settings.setValue('checkupdate', self.ui.actionCheck_for_update_at_start.isChecked()) self.settings.setValue('tolerance', self.ui.tolerance_le.text()) self.settings.beginGroup("/geometry") self.settings.setValue("X", self.pos().x()) self.settings.setValue("Y", self.pos().y()) self.settings.setValue("W", self.size().width()) self.settings.setValue("H", self.size().height()) self.settings.endGroup() def readSettings(self): self.imageFolder = os.path.normpath(str(self.settings.value("imageFolder").toString())) self.ui.actionIgnore_Transparent_Pixels.setChecked( self.settings.value("ignoreAlpha", True).toBool()) self.ui.actionCheck_for_update_at_start.setChecked( self.settings.value("checkupdate", True).toBool()) self.ui.tolerance_le.setText( self.settings.value("tolerance").toString()) self.settings.beginGroup("/geometry") p = QPoint() # position s = QSize() # size x = self.settings.value("X", -1).toInt()[0] y = self.settings.value("Y", -1).toInt()[0] # don't position outside current screen qRect = QtGui.QDesktopWidget.availableGeometry(app.desktop()) if x > qRect.right(): x = 10 if y > qRect.bottom(): y = 10 p.setX(x) p.setY(y) s.setWidth(self.settings.value("W", -1).toInt()[0]) s.setHeight(self.settings.value("H", -1).toInt()[0]) self.settings.endGroup() if p.x() > 0 and p.y() > 0 and s.width() > 0 and s.height() > 0: self.resize(s) # restore size self.move(p) # restore position def checkForNewVersion(self): if not self.ui.actionCheck_for_update_at_start.isChecked(): return r = urllib2.urlopen('http://downloads.testplant.com/downloads/ImageDiff/ImageDiff.txt') if r.getcode() == 200 and int(r.readline()) > _release: msgBox = QtGui.QMessageBox(self) msgBox.setWindowTitle("Version Check") msgBox.setTextFormat(QtCore.Qt.RichText) msgBox.setText( "A new version is available from:<P> <a href=\"http://www.testplant.com/dlds/eggplant-functional\">eggPlant Functional downloads</a>" ) msgBox.setIconPixmap(QPixmap(":/images/ImageDiff-64.png")) msgBox.exec_()