def __init__(self, title, left, top, width, height): super().__init__() self.title = title self.left = left self.top = top self.width = width self.height = height self.setWindowIcon(QtGui.QIcon("icon.png")) #file location self.open_file_location = os.path.dirname(os.path.abspath(__file__)) self.save_file_location = os.path.dirname(os.path.abspath(__file__)) # set textbox self.setTextBox() # set button self.setButton() # set label self.setLabel() self.uiManager = UIManager() self.initUI()
def onDeleteSelectedItemsAndAddToStop(self): from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.deleteSelectedItems(True) mainUI = UIManager.instance().getMainUI() mainUI.symbolDock.widget().updateForbiddenSymbol()
def _onOpen(self): from UIManager import UIManager scene = UIManager.instance().getScene() scene.onOpenDB() mainUI = UIManager.instance().getMainUI() mainUI.symbolDock.widget().updateForbiddenSymbol() mainUI.schemeDock.widget().updateScheme()
def __init__(self, *args): super(CodeView, self).__init__(*args) from UIManager import UIManager self.setScene(UIManager.instance().getScene()) self.setViewportUpdateMode(QtGui.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtGui.QGraphicsView.CacheNone) #self.setDragMode(QtGui.QGraphicsView.RubberBandDrag) self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse) self.setMouseTracking(True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setAcceptDrops(True) self.mousePressPnt = None self.mouseCurPnt = None self.isFrameSelectMode = False self.isMousePressed = False self.updateTimer = QtCore.QTimer() self.updateTimer.setInterval(70) self.connect(self.updateTimer, QtCore.SIGNAL('timeout()'), self, QtCore.SLOT('updateView()')) self.centerPnt = QtCore.QPointF() self.scale(0.6,0.6) self.brushRadius = 8 self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(50,50,50))) self.hudFont = QtGui.QFont('tahoma', 8) self.hudFontMetric = QtGui.QFontMetrics(self.hudFont)
def onSelectItems(self): from ui.CodeUIItem import CodeUIItem from ui.CodeUIEdgeItem import CodeUIEdgeItem itemList = self.selectedItems() # update LRU self.selectTimeStamp += 1 for item in itemList: if not isinstance(item, CodeUIItem): continue item.selectCounter += 1 item.selectTimeStamp = self.selectTimeStamp uniqueName = item.getUniqueName() self.updateLRU([uniqueName]) self.removeItemLRU() # update comment itemName = '' itemComment = '' if len(itemList) == 1: item = itemList[0] if isinstance(item, CodeUIItem): itemName = item.name itemComment = self.itemDataDict.get(item.uniqueName, {}).get('comment','') elif isinstance(item, CodeUIEdgeItem): srcItem = self.itemDict.get(item.srcUniqueName) tarItem = self.itemDict.get(item.tarUniqueName) if srcItem and tarItem: itemName = srcItem.name + ' -> ' + tarItem.name itemComment = self.edgeDataDict.get((item.srcUniqueName, item.tarUniqueName), {}).get('comment', '') from UIManager import UIManager symbolWidget = UIManager.instance().getMainUI().getSymbolWidget() if symbolWidget: symbolWidget.updateSymbol(itemName, itemComment)
def onClearOldestItem(self): from UIManager import UIManager from db.DBManager import DBManager scene = UIManager.instance().getScene() if scene: scene.clearOldItem()
def onDeleteOldItems(self): from UIManager import UIManager from db.DBManager import DBManager scene = UIManager.instance().getScene() if scene: scene.clearUnusedItems()
def mouseDoubleClickEvent(self, event): super(CodeUIItem, self).mouseDoubleClickEvent(event) from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.showInEditor()
def __init__(self, *args): super(CodeView, self).__init__(*args) from UIManager import UIManager self.setScene(UIManager.instance().getScene()) self.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtWidgets.QGraphicsView.CacheNone) #self.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag) self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse) self.setMouseTracking(True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setAcceptDrops(True) self.mousePressPnt = None self.mouseCurPnt = None self.isFrameSelectMode = False self.isMousePressed = False self.updateTimer = QtCore.QTimer() self.updateTimer.setInterval(70) # self.connect(self.updateTimer, QtCore.SIGNAL('timeout()'), self, QtCore.SLOT('updateView()')) self.updateTimer.timeout.connect(self.updateView) self.centerPnt = QtCore.QPointF() self.scale(0.6,0.6) self.brushRadius = 8 self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(50,50,50))) self.hudFont = QtGui.QFont('tahoma', 8) self.hudFontMetric = QtGui.QFontMetrics(self.hudFont)
def drawScheme(self, painter, rectF): from UIManager import UIManager scene = UIManager.instance().getScene() schemeList = scene.getCurrentSchemeList() nScheme = len(schemeList) if not nScheme: return painter.setTransform(QtGui.QTransform()) painter.setFont(self.hudFont) colorList = scene.getCurrentSchemeColorList() cw = 10 y = 10 maxWidth = 0 for ithScheme, schemeName in enumerate(schemeList): schemeSize = self.hudFontMetric.size(QtCore.Qt.TextSingleLine, schemeName) maxWidth = max(maxWidth, schemeSize.width()) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Multiply) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QColor(0,0,0,150)) painter.drawRect(5,5, 80 + maxWidth, nScheme * cw + (nScheme-1)*2 + 10) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Source) for ithScheme, schemeName in enumerate(schemeList): painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QBrush(colorList[ithScheme])) painter.drawRect(QtCore.QRect(10,y+5,20,2)) painter.setPen(QtGui.QPen(QtGui.QColor(255,157,38,255),1)) painter.drawText(39, y+cw, 'Alt + %s' % (ithScheme+1,)) painter.setPen(QtGui.QPen(QtGui.QColor(255,255,255,255),1)) painter.drawText(QtCore.QRect(80,y-1,maxWidth,cw+3), QtCore.Qt.AlignRight | QtCore.Qt.AlignTop, schemeName) y += cw + 2
def mouseDoubleClickEvent(self, event): super(CodeUIEdgeItem, self).mouseDoubleClickEvent(event) from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.showInEditor()
def drawComment(self, painter, rectF): from UIManager import UIManager scene = UIManager.instance().getScene() for uname, itemData in scene.itemDataDict.items(): item = scene.itemDict.get(uname, None) if not item: continue
def onAddToScene(self): item = self.resultList.currentItem() from UIManager import UIManager scene = UIManager.instance().getScene() if not item or not scene: return scene.acquireLock() res, codeItem = scene.addCodeItem(item.getUniqueName()) if codeItem: UIManager.instance().getScene().clearSelection() codeItem.setSelected(True) scene.releaseLock()
def getMiddlePos(self): from UIManager import UIManager scene = UIManager.instance().getScene() srcNode = scene.getNode(self.srcUniqueName) tarNode = scene.getNode(self.tarUniqueName) if not srcNode or not tarNode: return QtCore.QPointF() return (srcNode.pos() + tarNode.pos()) * 0.5
def showScheme(self, param): ithScheme = param[0]-1 isSelected = False if len(param) >= 2: isSelected = param[1] from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.showIthScheme(ithScheme, isSelected)
def onAnalyze(self): dbmgr = DBManager.DBManager.instance() from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.acquireLock() dbmgr.analysisDB() #dbmgr.getDB().open(r'C:\Users\me\AppData\Roaming\Sublime Text 3\Packages\CodeAtlas\CodeAtlasSublime.udb') scene.releaseLock()
def showScheme(self, param): ithScheme = param[0] - 1 isSelected = False if len(param) >= 2: isSelected = param[1] from UIManager import UIManager scene = UIManager.instance().getScene() if scene: scene.showIthScheme(ithScheme, isSelected)
def onTest(self): dbmgr = DBManager.DBManager.instance() # defaultPath = r'C:\Users\me\AppData\Roaming\Sublime Text 3\Packages\CodeAtlas\CodeAtlasSublime.udb' # defaultPath = 'I:/Programs/masteringOpenCV/Chapter3_MarkerlessAR/doc/xml/index.xml' # defaultPath = 'I:/Programs/mitsuba/doxygenData/xml/index.xml' defaultPath = 'D:/Code/NewRapidRT/rapidrt/Doxyfile' dbmgr.openDB(defaultPath) from UIManager import UIManager symScene = UIManager.instance().getSymbolScene()
def getNodePos(self): from UIManager import UIManager scene = UIManager.instance().getScene() srcNode = scene.getNode(self.srcUniqueName) tarNode = scene.getNode(self.tarUniqueName) if not srcNode or not tarNode: return QtCore.QPointF(), QtCore.QPointF() srcPos = srcNode.pos() tarPos = tarNode.pos() return (srcNode.getRightSlotPos(), tarNode.getLeftSlotPos())
def updateScheme(self): from UIManager import UIManager scene = UIManager.instance().getScene() nameList = scene.getSchemeNameList() filter = self.filterEdit.text().lower() self.schemeList.clear() for name in nameList: if filter in name.lower(): self.schemeList.addItem(SchemeItem(name))
def onDeleteScheme(self): item = self.schemeList.currentItem() if not item: QtWidgets.QMessageBox.warning(self, "Warning", "Please select an item to delete.") return from UIManager import UIManager scene = UIManager.instance().getScene() scene.deleteScheme(item.getUniqueName()) self.updateScheme()
def keyPressEvent(self, event): from UIManager import UIManager mainUI = UIManager.instance().getMainUI() self.setCursor(QtCore.Qt.ArrowCursor) # if event.modifiers() == QtCore.Qt.AltModifier: if event.key() == QtCore.Qt.Key_Up: mainUI.goToUp() elif event.key() == QtCore.Qt.Key_Down: mainUI.goToDown() elif event.key() == QtCore.Qt.Key_Left: mainUI.goToLeft() elif event.key() == QtCore.Qt.Key_Right: mainUI.goToRight() elif event.modifiers() == QtCore.Qt.AltModifier: if event.key() == QtCore.Qt.Key_1: mainUI.showScheme([1, True]) elif event.key() == QtCore.Qt.Key_2: mainUI.showScheme([2, True]) elif event.key() == QtCore.Qt.Key_3: mainUI.showScheme([3, True]) elif event.key() == QtCore.Qt.Key_4: mainUI.showScheme([4, True]) elif event.key() == QtCore.Qt.Key_5: mainUI.showScheme([5, True]) elif event.key() == QtCore.Qt.Key_6: mainUI.showScheme([6, True]) elif event.key() == QtCore.Qt.Key_7: mainUI.showScheme([7, True]) elif event.key() == QtCore.Qt.Key_8: mainUI.showScheme([8, True]) elif event.key() == QtCore.Qt.Key_9: mainUI.showScheme([9, True]) elif event.modifiers() == QtCore.Qt.ControlModifier: if event.key() == QtCore.Qt.Key_1: mainUI.toggleSelectedEdgeToScheme([1, True]) elif event.key() == QtCore.Qt.Key_2: mainUI.toggleSelectedEdgeToScheme([2, True]) elif event.key() == QtCore.Qt.Key_3: mainUI.toggleSelectedEdgeToScheme([3, True]) elif event.key() == QtCore.Qt.Key_4: mainUI.toggleSelectedEdgeToScheme([4, True]) elif event.key() == QtCore.Qt.Key_5: mainUI.toggleSelectedEdgeToScheme([5, True]) elif event.key() == QtCore.Qt.Key_6: mainUI.toggleSelectedEdgeToScheme([6, True]) elif event.key() == QtCore.Qt.Key_7: mainUI.toggleSelectedEdgeToScheme([7, True]) elif event.key() == QtCore.Qt.Key_8: mainUI.toggleSelectedEdgeToScheme([8, True]) elif event.key() == QtCore.Qt.Key_9: mainUI.toggleSelectedEdgeToScheme([9, True]) else: super(CodeView, self).keyPressEvent(event) self.viewport().update()
def onOpen(self): dialog = QtWidgets.QFileDialog() curDir = QtCore.QDir() curPath = curDir.currentPath() dbPath = dialog.getOpenFileName(self, 'Open Database', curDir.currentPath()) if dbPath: dbmgr = DBManager.DBManager.instance() dbmgr.openDB(dbPath[0]) from UIManager import UIManager symScene = UIManager.instance().getSymbolScene()
def onDeleteScheme(self): item = self.schemeList.currentItem() if not item: QtGui.QMessageBox.warning(self, "Warning", "Please select an item to delete.") return from UIManager import UIManager scene = UIManager.instance().getScene() scene.deleteScheme(item.getUniqueName()) self.updateScheme()
def updateForbiddenSymbol(self): from UIManager import UIManager scene = UIManager.instance().getScene() forbidden = scene.getForbiddenSymbol() filter = self.filterEdit.text().lower() self.forbiddenList.clear() itemList = [ForbiddenItem(uname, name) for uname, name in forbidden.items() if filter in name.lower()] itemList.sort(key = lambda item: item.text().lower()) for item in itemList: self.forbiddenList.addItem(item)
def onOpenPath(self, param): dialog = QtWidgets.QFileDialog() curDir = QtCore.QDir() curPath = curDir.currentPath() if param and False: curPath = param[0] dbPath = dialog.getOpenFileName(self, 'Open Database', curPath) if dbPath: dbmgr = DBManager.DBManager.instance() dbmgr.getDB().open(dbPath) from UIManager import UIManager symScene = UIManager.instance().getSymbolScene()
def onOpenPath(self, param): dialog = QtGui.QFileDialog() curDir = QtCore.QDir() curPath = curDir.currentPath() if param and False: curPath = param[0] dbPath = dialog.getOpenFileName(self, 'Open Database', curPath) if dbPath: dbmgr = DBManager.DBManager.instance() dbmgr.getDB().open(dbPath) from UIManager import UIManager symScene = UIManager.instance().getSymbolScene()
def onShowScheme(self): item = self.schemeList.currentItem() if not item: QtWidgets.QMessageBox.warning(self, "Warning", "Please select an item to show.") return schemeName = item.getUniqueName() from UIManager import UIManager scene = UIManager.instance().getScene() scene.acquireLock() scene.showScheme(schemeName, True) scene.releaseLock() self.updateScheme()
def onShowScheme(self): item = self.schemeList.currentItem() if not item: QtGui.QMessageBox.warning(self, "Warning", "Please select an item to show.") return schemeName = item.getUniqueName() from UIManager import UIManager scene = UIManager.instance().getScene() scene.acquireLock() scene.showScheme(schemeName, True) scene.releaseLock() self.updateScheme()
def run(self): from UIManager import UIManager mainUI = UIManager.instance().getMainUI() self.recvSignal.connect(mainUI.onSocketEvent, Qt.Qt.QueuedConnection) address = self.myAddress self.socketObj = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.socketObj.bind(address) while True: data, addr = self.socketObj.recvfrom(1024 * 5) dataStr = data.decode() self.recvSignal.emit(dataStr) print ('close socket') self.socketObj.close()
def onSocketEvent(self, dataStr): from UIManager import UIManager dataObj = JSONDecoder().decode(dataStr) funName = dataObj.get('f') paramDict = dataObj.get('p', None) mainUI = self scene = UIManager.instance().getScene() funObj = getattr(mainUI, funName) if funObj: scene.acquireLock() if paramDict is None: funObj() else: funObj(paramDict) scene.releaseLock()
def onDeleteForbidden(self): item = self.forbiddenList.currentItem() from UIManager import UIManager scene = UIManager.instance().getScene() if not item or not scene: return scene.acquireLock() scene.deleteForbiddenSymbol(item.getUniqueName()) self.updateForbiddenSymbol() item = self.forbiddenList.item(0) if item: self.forbiddenList.setCurrentItem(item) scene.releaseLock()
def mouseMoveEvent(self, event): super(CodeUIItem, self).mouseMoveEvent(event) if self.isSelected(): # update target positions of all dragging items from UIManager import UIManager scene = UIManager.instance().getScene() for uname, node in scene.itemDict.items(): if node.isSelected(): node.targetPos = QtCore.QPointF(node.pos().x(), node.pos().y()) if event.buttons().__int__() & QtCore.Qt.MidButton or event.buttons().__int__() & QtCore.Qt.RightButton: print('event button:', event.buttons().__int__()) drag = QtGui.QDrag(event.widget()) mime = QtCore.QMimeData() mime.setText(self.uniqueName) drag.setMimeData(mime) drag.exec()
def mouseMoveEvent(self, event): super(CodeUIItem, self).mouseMoveEvent(event) if self.isSelected(): # update target positions of all dragging items from UIManager import UIManager scene = UIManager.instance().getScene() for uname, node in scene.itemDict.items(): if node.isSelected(): node.targetPos = QtCore.QPointF(node.pos().x(), node.pos().y()) if event.buttons().__int__() & QtCore.Qt.MidButton or event.buttons().__int__() & QtCore.Qt.RightButton: print('event button:', event.buttons().__int__()) drag = QtWidgets.QDrag(event.widget()) mime = QtCore.QMimeData() mime.setText(self.uniqueName) drag.setMimeData(mime) drag.exec()
def drawLegend(self, painter, rectF): painter.setTransform(QtGui.QTransform()) painter.setFont(self.hudFont) from UIManager import UIManager scene = UIManager.instance().getScene() itemDict = scene.getItemDict() classNameDict = {} for uname, item in itemDict.items(): if item.isSelected() or item.isConnectedToFocusNode: cname = item.getClassName() if not cname: cname = '[global function]' classNameDict[cname] = item.getColor() maxWidth = 0 cw = 10 nClasses = len(classNameDict) if not nClasses: return for className in classNameDict.keys(): classSize = self.hudFontMetric.size(QtCore.Qt.TextSingleLine, className) maxWidth = max(maxWidth, classSize.width()) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Multiply) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QColor(0, 0, 0, 150)) interiorHeight = nClasses * cw + (nClasses - 1) * 2 painter.drawRect(5, self.height() - 15 - interiorHeight, 22 + maxWidth, interiorHeight + 10) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Source) y = self.height() - 20 for cname, clr in classNameDict.items(): painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QBrush(clr)) painter.drawRect(QtCore.QRect(10, y, cw, cw)) painter.setPen(QtGui.QPen(QtGui.QColor(255, 255, 255, 255), 1)) painter.drawText(cw + 12, y + cw, cname) y -= cw + 2
def onAddOrModifyScheme(self): schemeName = self.nameEdit.text() if not schemeName: return from UIManager import UIManager scene = UIManager.instance().getScene() schemeNameList = scene.getSchemeNameList() isAdd = True if schemeName in schemeNameList: button = QtWidgets.QMessageBox.question(self, "Add Scheme", "\"%s\" already exists. Replace it?" % schemeName, QtWidgets.QMessageBox.Ok | QtWidgets.QMessageBox.No) if button != QtWidgets.QMessageBox.Ok: isAdd = False if isAdd: scene.addOrReplaceScheme(schemeName) self.updateScheme()
def onAddOrModifyScheme(self): schemeName = self.nameEdit.text() if not schemeName: return from UIManager import UIManager scene = UIManager.instance().getScene() schemeNameList = scene.getSchemeNameList() isAdd = True if schemeName in schemeNameList: button = QtGui.QMessageBox.question( self, "Add Scheme", "\"%s\" already exists. Replace it?" % schemeName, QtGui.QMessageBox.Ok | QtGui.QMessageBox.No) if button != QtGui.QMessageBox.Ok: isAdd = False if isAdd: scene.addOrReplaceScheme(schemeName) self.updateScheme()
def drawLegend(self, painter, rectF): painter.setTransform(QtGui.QTransform()) painter.setFont(self.hudFont) from UIManager import UIManager scene = UIManager.instance().getScene() itemDict = scene.getItemDict() classNameDict = {} for uname, item in itemDict.items(): if item.isSelected() or item.isConnectedToFocusNode: cname = item.getClassName() if not cname: cname = '[global function]' classNameDict[cname] = item.getColor() maxWidth = 0 cw = 10 nClasses = len(classNameDict) if not nClasses: return for className in classNameDict.keys(): classSize = self.hudFontMetric.size(QtCore.Qt.TextSingleLine, className) maxWidth = max(maxWidth, classSize.width()) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Multiply) painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QColor(0,0,0,150)) interiorHeight = nClasses * cw + (nClasses-1)*2 painter.drawRect(5,self.height()-15-interiorHeight, 22 + maxWidth, interiorHeight + 10) painter.setCompositionMode(QtGui.QPainter.CompositionMode_Source) y = self.height() - 20 for cname, clr in classNameDict.items(): painter.setPen(QtCore.Qt.NoPen) painter.setBrush(QtGui.QBrush(clr)) painter.drawRect(QtCore.QRect(10,y,cw,cw)) painter.setPen(QtGui.QPen(QtGui.QColor(255,255,255,255),1)) painter.drawText(cw+12, y+cw, cname) y -= cw + 2
def __init__(self, *args): super(SymbolView, self).__init__(*args) from UIManager import UIManager self.setScene(UIManager.instance().getSymbolScene()) self.setViewportUpdateMode(QtGui.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtGui.QGraphicsView.CacheNone) #self.setDragMode(QtGui.QGraphicsView.RubberBandDrag) self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse) self.setMouseTracking(True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setAcceptDrops(True) self.setViewport(QtOpenGL.QGLWidget()) self.centerPnt = QtCore.QPointF() self.scale(0.6, 0.6) self.mousePressPnt = None self.mouseCurPnt = None self.isFrameSelectMode = False
def dropEvent(self, event): super(CodeUIItem, self).dropEvent(event) from UIManager import UIManager scene = UIManager.instance().getScene() if not scene: return mouseButtons = event.buttons() if mouseButtons & QtCore.Qt.MiddleButton: srcName = event.mimeData().text() srcItem = scene.getNode(srcName) if not srcItem: return if not srcItem.isFunction() or not self.isFunction(): return scene.addCallPaths(srcName, self.uniqueName) elif mouseButtons & QtCore.Qt.RightButton: srcName = event.mimeData().text() srcItem = scene.getNode(srcName) if not srcItem: return scene.addCustomEdge(srcName, self.uniqueName, {})
def __init__(self, *args): super(SymbolView, self).__init__(*args) from UIManager import UIManager self.setScene(UIManager.instance().getSymbolScene()) self.setViewportUpdateMode(QtWidgets.QGraphicsView.FullViewportUpdate) self.setCacheMode(QtWidgets.QGraphicsView.CacheNone) #self.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag) self.setTransformationAnchor(QtWidgets.QGraphicsView.AnchorUnderMouse) self.setMouseTracking(True) self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) self.setAcceptDrops(True) self.setViewport(QtOpenGL.QGLWidget()) self.centerPnt = QtCore.QPointF() self.scale(0.6,0.6) self.mousePressPnt = None self.mouseCurPnt = None self.isFrameSelectMode = False