def setFootprint(self, polygon): self.clear() if not polygon: return lon = np.asarray([p.x() for p in polygon]) lat = np.asarray([p.y() for p in polygon]) mlon = lon.mean() mlat = lat.mean() delta = mlon - utils.geonormalize(mlon) if delta: lon -= delta mlon -= delta polygon.translate(-delta, 0) self.box = self.plot(polygon) points = QtGui.QPolygonF([ QtCore.QPointF(mlon - self.bigBoxSize / 2., mlat - self.bigBoxSize / 2.), QtCore.QPointF(mlon + self.bigBoxSize / 2., mlat - self.bigBoxSize / 2.), QtCore.QPointF(mlon + self.bigBoxSize / 2., mlat + self.bigBoxSize / 2.), QtCore.QPointF(mlon - self.bigBoxSize / 2., mlat + self.bigBoxSize / 2.), ]) self.bigbox = self.plot(points) self.actionZoomIn.setEnabled(True)
def openInGoogleMaps(self): '''Open google-maps centering the map on scene centre. .. seealso:: http://mapki.com/wiki/Google_Map_Parameters ''' item = self._currentDatasetItem() if item is None: _log.info('no item selected.') QtWidgets.QMessageBox.information(self.app, self.tr('Information'), self.tr('No item selected.')) return try: cmapper = item.cmapper except AttributeError: _log.error('item "%s" seems to have no geographic info.', item.filename) return lon, lat = cmapper.imgToGeoGrid([0.5, item.RasterXSize - 0.5], [0.5, item.RasterYSize - 0.5]) deltalon = np.max(lon) - np.min(lon) deltalat = np.max(lat) - np.min(lat) zoomlon = np.floor(np.log2(360 / deltalon)) zoomlat = np.floor(np.log2(180 / deltalat)) zoomlevel = min(zoomlon, zoomlat) + 1 pixel, line = item.RasterXSize / 2., item.RasterYSize / 2. lon, lat = cmapper.imgToGeoPoints(pixel, line) url = QtCore.QUrl('http://maps.google.com/maps') # @COMPATIBILITY: PyQt4 --> PyQt5 try: query = QtCore.QUrlQuery() except AttributeError: query = url query.addQueryItem('q', '%fN,%fE' % (lat, lon)) # coordinates query.addQueryItem('t', 'h') # map type (hybrid) query.addQueryItem('z', str(zoomlevel)) # zoom level (1, 20) # @COMPATIBILITY: PyQt4 --> PyQt5 try: url.setQuery(query) except AttributeError: pass success = QtGui.QDesktopServices.openUrl(url) if not success: _log.warning('unable to open URL: "%s"', url) # @TODO: check QtWidgets.QMessageBox.warning( self.app, self.tr('Warning'), self.tr('Unable to open URL: "%s"') % str(url))
def sendBugReport(self): if not self._excInfoSet(): exctype, excvalue, tracebackobj = sys.exc_info() else: exctype = self.exctype excvalue = self.excvalue tracebackobj = self.tracebackobj error = traceback.format_exception_only(exctype, excvalue)[-1].strip() appname = QtWidgets.QApplication.applicationName() if appname: subject = '[%s] Bug report - %s' % (appname, error) else: subject = 'Bug report - %s' % error body = '[Please insert your comments and additional info here.]' body += '\n\n' + '-' * 80 + '\n' body += ''.join( utils.format_bugreport(exctype, excvalue, tracebackobj, extra_info=qtsupport.format_qt_info())) url = QtCore.QUrl('mailto:%s <%s>' % (info.author, info.author_email)) url.addQueryItem('subject', subject) url.addQueryItem('body', body) ret = QtGui.QDesktopServices.openUrl(url) if not ret: msg = self.tr('Unable to send the bug-report.\n' 'Please save the bug-report on file and send it ' 'manually.') QtWidgets.QMessageBox.warning(self, self.tr('WARNING'), msg)
class MdiMainWindow(QtWidgets.QMainWindow): '''Base class for MDI applications. :SIGNALS: * :attr:`subWindowClosed` ''' # @TODO: should the subWindowClosed signal be emitted by mdiarea? #: SIGNAL: it is emitted when an MDI subwindow is closed #: #: :C++ signature: `void subWindowClosed()` subWindowClosed = QtCore.Signal() def __init__(self, parent=None, flags=QtCore.Qt.WindowFlags(0), **kwargs): super(MdiMainWindow, self).__init__(parent, flags, **kwargs) #: MDI area instance (QMdiArea) self.mdiarea = QtWidgets.QMdiArea() self.setCentralWidget(self.mdiarea) self.mdiarea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.mdiarea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) #: sub-windows menu self.windowmenu = QtWindowListMenu(self.menuBar()) self.windowmenu.attachToMdiArea(self.mdiarea)
def _selectionmap(selection): sortedselection = sorted(selection, key=QtCore.QItemSelectionRange.parent) selectionmap = {} # collections.OrderedDict() for key, group in itertools.groupby(sortedselection, QtCore.QItemSelectionRange.parent): ranges = [] for item in sorted(group, key=QtCore.QItemSelectionRange.top): if len(ranges) == 0: ranges.append(item) continue lastitem = ranges[-1] assert lastitem.parent() == item.parent() if lastitem.bottom() + 1 >= item.top(): model = lastitem.model() topleft = model.index( min(lastitem.top(), item.top()), #min(lastitem.left(), item.left()), 0, lastitem.parent()) bottomright = model.index( max(lastitem.bottom(), item.bottom()), #max(lastitem.right(), item.right()), model.columnCount() - 1, lastitem.parent()) ranges[-1] = QtCore.QItemSelectionRange( topleft, bottomright) else: ranges.append(item) selectionmap[key] = ranges return selectionmap
def __init__(self, gdalobj, parent=None, **kwargs): super(BaseGdalGraphicsItem, self).__init__(parent, **kwargs) # @COMPATIBILITY: Qt >= 4.6.0 needs this flag to be set otherwise the # exact exposedRect is not computed # @SEEALSO: ItemUsesExtendedStyleOption item at # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum try: self.setFlag(QtWidgets.QGraphicsItem.ItemUsesExtendedStyleOptions) except AttributeError: self.setFlag(QtWidgets.QGraphicsItem.GraphicsItemFlag(0x200)) self.gdalobj = gdalobj try: # dataset w = gdalobj.RasterXSize h = gdalobj.RasterYSize except AttributeError: # raster band w = gdalobj.XSize h = gdalobj.YSize self._boundingRect = QtCore.QRectF(0, 0, w, h) #self.read_threshold = 1600*1200 self.stretch = imgutils.LinearStretcher() # @TODO: use lazy gaphicsitem initialization # @TODO: initialize stretching explicitly self._stretch_initialized = False self._data_preproc = None self.colortable = None
def updateMainViewBox(self, srcview=None): if not self.graphicsview.scene(): return if not srcview: # @TODO: check API srcview = self.app.currentGraphicsView() elif srcview is not self.app.currentGraphicsView(): # current view not yet updated: do nothing return if srcview: assert srcview.scene() == self.graphicsview.scene() # @TODO: check hbar = srcview.horizontalScrollBar() vbar = srcview.verticalScrollBar() # @TODO: bug report: mapping to scene seems to introduce a # spurious offset "x1 = 2*x0" and y1 = 2*y0; # this doesn't happen for "w" and "h" #polygon = srcview.mapToScene(hbar.value(), vbar.value(), # hbar.pageStep(), vbar.pageStep()) #@TODO: in case of rotations it should be better keep using # a polygon #self.graphicsview.viewbox = polygon.boundingRect() # @NOTE: this is a workaround; mapToScene should be used instead rect = QtCore.QRectF(hbar.value(), vbar.value(), hbar.pageStep(), vbar.pageStep()) transform = srcview.transform().inverted()[0] self.graphicsview.viewbox = transform.mapRect(rect)
def _levelOfDetailFromTransform(worldTransform): # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of # QStyleOptionGraphicsItem is deprecated # @SEEALSO: ItemUsesExtendedStyleOption item at # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum # # From qt/src/gui/styles/qstyleoption.cpp:5130 if worldTransform.type() <= QtGui.QTransform.TxTranslate: return 1 # Translation only? The LOD is 1. # Two unit vectors. v1 = QtCore.QLineF(0, 0, 1, 0) v2 = QtCore.QLineF(0, 0, 0, 1) # LOD is the transformed area of a 1x1 rectangle. return np.sqrt( worldTransform.map(v1).length() * worldTransform.map(v2).length())
def run_tool(self, tool, *args, **kwargs): '''Run an external tool in controlled way. The output of the child process is handled by the controller and, optionally, notifications can be achieved at sub-process termination. ''' assert self.subprocess.state() == self.subprocess.NotRunning self.reset() self._tool = tool if self._tool.stdout_handler: self._tool.stdout_handler.reset() if self._tool.stderr_handler: self._tool.stderr_handler.reset() cmd = self._tool.cmdline(*args, **kwargs) self.prerun_hook(cmd) cmd = ' '.join(cmd) if self._tool.env: qenv = QtCore.QProcessEnvironment() for key, val in self._tool.env.items(): qenv.insert(key, str(val)) self.subprocess.setProcessEnvironment(qenv) if self._tool.cwd: self.subprocess.setWorkingDirectory(self._tool.cwd) self.logger.debug('"shell" flag set to %s.' % self._tool.shell) self.logger.debug('Starting: %s' % cmd) self.subprocess.start(cmd) self.subprocess.closeWriteChannel()
def findMdiChild(self, fileName): canonicalFilePath = QtCore.QFileInfo(fileName).canonicalFilePath() for window in self.mdiarea.subWindowList(): if window.widget().currentFile() == canonicalFilePath: return window return None
def loadFile(self, fileName): qfile = QtCore.QFile(fileName) if not qfile.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text): QtWidgets.QMessageBox.warning( self, self.tr('MDI'), self.tr('Cannot read file %s:\n%s.') % (fileName, qfile.errorString())) return False instr = QtCore.QTextStream(qfile) QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) self.setPlainText(instr.readAll()) QtWidgets.QApplication.restoreOverrideCursor() self.setCurrentFile(fileName) return True
def _moveSelectionRange(self, selectionrange, dst): if selectionrange.top() == dst: return selectionrange model = selectionrange.model() parentindex = selectionrange.parent() parentitem = self._parentitem(selectionrange) nrows_selected = selectionrange.bottom() - selectionrange.top() + 1 ncols = model.columnCount() if nrows_selected == parentitem.rowCount(): return selectionrange if dst > parentitem.rowCount() - nrows_selected or dst < 0: return selectionrange selectedrows = self._takeRowsRange(selectionrange) for index, items in enumerate(selectedrows): parentitem.insertRow(dst + index, items) topleft = model.index(dst, 0, parentindex) bottomright = model.index(dst + nrows_selected - 1, ncols - 1, parentindex) return QtCore.QItemSelectionRange(topleft, bottomright)
def attachToMdiArea(self, mdiArea): '''Instructs this menu to display navigation actions for the QMdiArea *mdiArea*. This should be done before this menu is shown. Specifying a null *mdiArea* is meaningless and will generate a warning. For special usecases, see the note about auto-attachment in the class description. ''' if mdiArea == self.mdi: return acts = self._stdGroup.actions() acts = dict( zip([ 'CloseAction', 'CloseAllAction', '', 'TileAction', 'CascadeAction', '', 'NextAction', 'PrevAction' ], acts)) if self.mdi: # i.e. we have previously been attached mdi = self.mdi acts['CloseAction'].triggered.disconnect(mdi.closeActiveSubWindow) acts['CloseAllAction'].triggered.disconnect(mdi.closeAllSubWindows) acts['TileAction'].triggered.disconnect(mdi.tileSubWindows) acts['CascadeAction'].triggered.disconnect(mdi.cascadeSubWindows) acts['NextAction'].triggered.disconnect(mdi.activateNextSubWindow) acts['PrevAction'].triggered.disconnect( mdi.activatePreviousSubWindow) self.mdi = mdiArea if not self.mdi: QtCore.qWarning('QtWindowListMenu::attachToMdiArea(): ' 'mdiArea is 0; menu will be empty.') return acts['CloseAction'].triggered.connect(self.mdi.closeActiveSubWindow) acts['CloseAllAction'].triggered.connect(self.mdi.closeAllSubWindows) acts['TileAction'].triggered.connect(self.mdi.tileSubWindows) acts['CascadeAction'].triggered.connect(self.mdi.cascadeSubWindows) acts['NextAction'].triggered.connect(self.mdi.activateNextSubWindow) acts['PrevAction'].triggered.connect( self.mdi.activatePreviousSubWindow)
def saveFile(self, fileName): qfile = QtCore.QFile(fileName) if not qfile.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text): QtWidgets.QMessageBox.warning( self, self.tr('MDI'), self.tr('Cannot write file %s:\n%s.') % (fileName, qfile.errorString())) return False outstr = QtCore.QTextStream(qfile) QtCore.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor) outstr << self.toPlainText() QtCore.QApplication.restoreOverrideCursor() self.setCurrentFile(fileName) return True
def showDocumentation(self, page): if not self.startAssistant(): return ba = QtCore.QByteArray("SetSource ") ba.append(self.APP_DOC_PATH) self.proc.write(ba + page + '\0')
def attachToMdiArea(self, mdiArea): '''Instructs this menu to display navigation actions for the QMdiArea *mdiArea*. This should be done before this menu is shown. Specifying a null *mdiArea* is meaningless and will generate a warning. For special usecases, see the note about auto-attachment in the class description. ''' if mdiArea == self.mdi: return acts = self._stdGroup.actions() acts = dict(zip(['CloseAction', 'CloseAllAction', '', 'TileAction', 'CascadeAction', '', 'NextAction', 'PrevAction'], acts)) if self.mdi: # i.e. we have previously been attached mdi = self.mdi acts['CloseAction'].triggered.disconnect(mdi.closeActiveSubWindow) acts['CloseAllAction'].triggered.disconnect(mdi.closeAllSubWindows) acts['TileAction'].triggered.disconnect(mdi.tileSubWindows) acts['CascadeAction'].triggered.disconnect(mdi.cascadeSubWindows) acts['NextAction'].triggered.disconnect(mdi.activateNextSubWindow) acts['PrevAction'].triggered.disconnect( mdi.activatePreviousSubWindow) self.mdi = mdiArea if not self.mdi: QtCore.qWarning('QtWindowListMenu::attachToMdiArea(): ' 'mdiArea is 0; menu will be empty.') return acts['CloseAction'].triggered.connect(self.mdi.closeActiveSubWindow) acts['CloseAllAction'].triggered.connect(self.mdi.closeAllSubWindows) acts['TileAction'].triggered.connect(self.mdi.tileSubWindows) acts['CascadeAction'].triggered.connect(self.mdi.cascadeSubWindows) acts['NextAction'].triggered.connect(self.mdi.activateNextSubWindow) acts['PrevAction'].triggered.connect( self.mdi.activatePreviousSubWindow)
def __init__(self, *args, **kwargs): super(DoubleSpinBox, self).__init__(*args, **kwargs) self.lineEdit().setValidator(QtGui.QDoubleValidator(self)) self.setDecimals(7) self.setRange(-1e50, 1e50) qlocale = QtCore.QLocale('C') qlocale.setNumberOptions(QtCore.QLocale.OmitGroupSeparator) self.setLocale(qlocale)
def __init__(self, logger=None, parent=None, **kwargs): QtCore.QObject.__init__(self, parent, **kwargs) BaseToolController.__init__(self, logger) self.subprocess = QtCore.QProcess(parent) self.subprocess.setProcessChannelMode(QtCore.QProcess.MergedChannels) # connect process handlers and I/O handlers self.subprocess.readyReadStandardOutput.connect(self.handle_stdout) self.subprocess.readyReadStandardError.connect(self.handle_stderr) self.subprocess.error.connect(self.handle_error) self.subprocess.finished.connect(self.finalize_run)
def sceneEventFilter(self, obj, event): if event.type() == QtCore.QEvent.GraphicsSceneMouseRelease: p0 = event.buttonDownScenePos(QtCore.Qt.LeftButton) p1 = event.scenePos() rect = QtCore.QRectF(p0, p1).normalized() self.rubberBandSeclection.emit(rect) return True #return obj.eventFilter(obj, event) # @TODO: check #return QtWidgets.QGraphicsScene.eventFilter(self, obj, event) return False
def moveSelectionUp(self, selectionmodel): #assert selectionmodel.model() is self.model selection = selectionmodel.selection() selectionmap = self._selectionmap(selection) newselection = QtCore.QItemSelection() for parent, ranges in selectionmap.items(): for selectionrange in ranges: dst = selectionrange.top() - 1 newrange = self._moveSelectionRange(selectionrange, dst) newselection.append(newrange) selectionmodel.select(newselection, SelectCurrentRows)
def moveSelectionToTop(self, selectionmodel): #assert selectionmodel.model() is self.model selection = selectionmodel.selection() selectionmap = self._selectionmap(selection) newselection = QtCore.QItemSelection() for parent, ranges in selectionmap.items(): dst = 0 for selectionrange in ranges: newrange = self._moveSelectionRange(selectionrange, dst) newselection.append(newrange) dst = newrange.bottom() + 1 selectionmodel.select(newselection, SelectCurrentRows)
def addSoftwareVersion(self, sw, version, link=''): tablewidget = self.versionsTableWidget index = tablewidget.rowCount() tablewidget.setRowCount(index + 1) tablewidget.setItem(index, 0, QtWidgets.QTableWidgetItem(sw)) tablewidget.setItem(index, 1, QtWidgets.QTableWidgetItem(version)) #tablewidget.setItem(row, 2, QtWidgets.QTableWidgetItem(link)) linkLabel = QtWidgets.QLabel('<a href="{0}">{0}</a>'.format(link)) linkLabel.linkActivated.connect( lambda text: QtGui.QDesktopServices.openUrl(QtCore.QUrl(text))) tablewidget.setCellWidget(index, 2, linkLabel)
def startAssistant(self): if not self.proc: self.proc = QtCore.QProcess() if self.proc.state() != QtCore.QProcess.Running: app = QtCore.QLibraryInfo.location( QtCore.QLibraryInfo.BinariesPath) app += QtCore.QDir.separator() if sys.platform == 'darwin': app += QtCore.QLatin1String( 'Assistant.app/Contents/MacOS/Assistant') else: app += QtCore.QLatin1String('assistant') args = [ QtCore.QLatin1String('-collectionFile'), QtCore.QLatin1String('path to .qhc'), QtCore.QLatin1String('-enableRemoteControl'), ] self.proc.start(app, args) if not self.proc.waitForStarted(): if QtWidgets.aApp is not None: tr = QtWidgets.qApp.tr else: tr = str QtWidgets.QMessageBox.critical( 0, tr('Simple Text Viewer'), tr('Unable to launch Qt Assistant (%s)') % app) return False return True
def _levelOfDetail(option, painter): # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of # QStyleOptionGraphicsItem is deprecated # @SEEALSO: ItemUsesExtendedStyleOption item at # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum if hasattr(option, 'levelOfDetailFromTransform'): levelOfDetail = option.levelOfDetailFromTransform( painter.transform()) elif QtCore.qVersion() >= '4.6.0': levelOfDetail = BaseGdalGraphicsItem._levelOfDetailFromTransform( painter.transform()) else: levelOfDetail = option.levelOfDetail return levelOfDetail
def moveSelectionToBottom(self, selectionmodel): #assert selectionmodel.model() is self.model selection = selectionmodel.selection() selectionmap = self._selectionmap(selection) newselection = QtCore.QItemSelection() nrows = selectionmodel.model().rowCount() for parent, ranges in selectionmap.items(): ranges.reverse() dst = nrows for selectionrange in ranges: dst -= selectionrange.height() newrange = self._moveSelectionRange(selectionrange, dst) newselection.append(newrange) selectionmodel.select(newselection, SelectCurrentRows)
def selectAllItems(itemview): '''Select all items in an QAbstractItemView.''' model = itemview.model() topleft = model.index(0, 0) try: bottomright = model.index(model.rowCount() - 1, model.columnCount() - 1) except (TypeError, AttributeError): # columnCount is a private method in QAbstractListModel # assume it is a list bottomright = model.index(model.rowCount() - 1) selection = QtCore.QItemSelection(topleft, bottomright) itemview.selectionModel().select(selection, QtCore.QItemSelectionModel.Select)
def format_qt_info(): qlocale = QtCore.QLocale() supported_image_formats = [ bytes(fmt).decode('utf-8') for fmt in QtGui.QImageReader.supportedImageFormats() ] qt_info = [ 'Qt system locale: %s\n' % qlocale.system().name(), 'Qt locale name: %s\n' % qlocale.name(), 'Qt locale country: %s\n' % qlocale.countryToString(qlocale.country()), 'Qt locale language: %s\n' % qlocale.languageToString( qlocale.language()), 'Qt locale decimal point: "%s"\n' % qlocale.decimalPoint(), 'Qt UI languages: %s\n' % qlocale.uiLanguages(), 'Qt supported image formats: %s\n' % ', '.join(supported_image_formats), ] return qt_info
class RubberBandMode(MouseMode): '''Mouse mode for rubber band selection. :SIGNALS: * :attr:`rubberBandSeclection` ''' dragmode = QtWidgets.QGraphicsView.RubberBandDrag cursor = QtCore.Qt.CrossCursor icon = qtsupport.geticon('area.svg', __name__) label = 'Rubber band' name = 'rubberband' #: SIGNAL: it is emitted when a rectangular area is selected #: #: :C++ signature: `void rubberBandSeclection(const QRectF&)` rubberBandSeclection = QtCore.Signal(QtCore.QRectF) def sceneEventFilter(self, obj, event): if event.type() == QtCore.QEvent.GraphicsSceneMouseRelease: p0 = event.buttonDownScenePos(QtCore.Qt.LeftButton) p1 = event.scenePos() rect = QtCore.QRectF(p0, p1).normalized() self.rubberBandSeclection.emit(rect) return True #return obj.eventFilter(obj, event) # @TODO: check #return QtWidgets.QGraphicsScene.eventFilter(self, obj, event) return False def scrollbarEventFilter(self, obj, event): # ignore wheel events if some button is pressed if ((event.type() == QtCore.QEvent.Wheel) and (event.buttons() != QtCore.Qt.NoButton)): return True else: return False
def _restoreFileDialogState(self, settings=None): if settings is None: settings = self.settings settings.beginGroup('filedialog') try: # state state = settings.value('state') if state is not None: try: # QFileDialog.restoreState is new in Qt 4.3 self.filedialog.restoreState(state) except AttributeError: _log.debug('unable to restore the file dialog state') # workdir workdir = settings.value('workdir', utils.default_workdir()) workdir = os.path.expanduser(os.path.expandvars(workdir)) self.filedialog.setDirectory(workdir) # history #history = settings.value('history') #if history: # self.filedialog.setHistory(history) # sidebar urls try: # QFileDialog.setSidebarUrls is new in Qt 4.3 sidebarurls = settings.value('sidebarurls') if sidebarurls: sidebarurls = [QtCore.QUrl(item) for item in sidebarurls] self.filedialog.setSidebarUrls(sidebarurls) except AttributeError: _log.debug('unable to restore sidebar URLs of the file dialog') finally: settings.endGroup()
''' author = 'Antonio Valentino' author_email = '*****@*****.**' copyright = 'Copyright (C) 2008-2015 %s <%s>' % (author, author_email) #license = _get_license() license_type = 'GNU GPL' website = 'http://gsdview.sourceforge.net' website_label = website download_url = 'http://sourceforge.net/projects/gsdview/files' all_versions = [ ('GSDView', version, website), ('Python', '.'.join(map(str, sys.version_info[:3])), 'https://www.python.org'), ('Qt', QtCore.qVersion(), 'http://www.qt.io/'), ('numpy', np.version.version, 'http://www.numpy.org'), ] if qtsix.qt_api.startswith('pyqt'): import sip all_versions.append(('sip', sip.SIP_VERSION_STR, 'http://www.riverbankcomputing.co.uk/software/sip')) all_versions.append(('PyQt', QtCore.PYQT_VERSION_STR, 'http://www.riverbankcomputing.co.uk/software/pyqt')) try: from qtsix import Qsci except ImportError: pass else: all_versions.append((
def strippedName(self, fullFileName): return QtCore.QFileInfo(fullFileName).fileName()
def setCurrentFile(self, fileName): self.curFile = QtCore.QFileInfo(fileName).canonicalFilePath() self.isUntitled = False self.document().setModified(False) self.setWindowModified(False) self.setWindowTitle(self.userFriendlyCurrentFile() + '[*]')