def copyToResources(self, name, folder): resourcesFolder = os.path.join(folder, "resources") if not QDir(resourcesFolder).exists(): QDir().mkpath(resourcesFolder) f = os.path.join(os.path.dirname(inspect.getfile(self.__class__)), name) if os.path.exists(f): shutil.copy2(f, resourcesFolder)
def writeHelpFiles(self, appdef, folder): helpFolder = os.path.join(folder, "help") if not QDir(helpFolder).exists(): QDir().mkpath(helpFolder) content = "" sections = "" for widget in appdef["Widgets"].values(): helpContent = widget.widgetHelp() if helpContent is not None: helpImageFiles = widget.widgetHelpFiles() content += '<a name="%s"></a>' % widget.name() content += '<h2>%s</h2>' % widget.description() content += helpContent sections += '<li><a href="#%s">%s</a></li>' % ( widget.name(), widget.description()) for f in helpImageFiles: shutil.copy2(f, helpFolder) values = { "@SECTIONS@": sections, "@TITLE@": appdef["Settings"]["Title"], "@CONTENT@": content } templatePath = os.path.join(os.path.dirname(__file__), "base.html") html = replaceInTemplate(templatePath, values) with codecs.open(os.path.join(helpFolder, "help.html"), "w", encoding="utf-8") as f: f.write(html)
def writeLegendFiles(self, appdef, app, folder): layers = appdef["Layers"] legend = {} legendFolder = os.path.join(folder, "resources", "legend") if not QDir(legendFolder).exists(): QDir().mkpath(legendFolder) for ilayer, applayer in enumerate(layers): if applayer.showInControls: layer = applayer.layer symbols = self.getLegendSymbols(layer, ilayer, legendFolder) if symbols: legend[layer.id()] = symbols app.variables.append("var legendData = %s;" % json.dumps(legend))
def __init__(self, parent, name=None): QTreeWidgetItem.__init__(self) self.filterList = ('mmp', 'MMP') if isinstance(parent, QListView): self.p = None if name: self.f = name else: self.f = '/' else: self.p = parent self.f = name self.readable = QDir(self.fullName()).isReadable() if not self.readable: self.setIcon(0, folderLockedIcon) else: self.setIcon(0, folderClosedIcon) if name is not None: self.setText(1, name) if isinstance(parent, QTreeWidget): parent.addTopLevelItem(self) else: parent.addChild(self)
def ensure_QDir(arg): if type(arg) == type(""): arg = QString(arg) if isinstance(arg, QString): arg = QDir(arg) assert isinstance(arg, QDir) # fails if caller passes the wrong thing return arg
def run_command(self, program, args): if debug_run(): print "will run this command:", program, args from PyQt4.Qt import QStringList, QProcess, QObject, SIGNAL, QDir # modified from runSim.py arguments = QStringList() if sys.platform == 'win32': program = "\"%s\"" % program # Double quotes needed by Windows. ###@@@ test this ### try it with blanks in output file name and in program name, once it works ###@@@ for arg in [program] + args: if arg: arguments.append(arg) self.simProcess = simProcess = QProcess() simProcess.setArguments(arguments) simProcess.setWorkingDirectory(QDir(self.working_directory)) # in case it writes random files if 1: # report stdout/stderr def blabout(): print "stdout:", simProcess.readStdout() ##e should also mention its existence in history, but don't copy it all there in case a lot def blaberr(): text = str(simProcess.readStderr()) # str since it's QString (i hope it can't be unicode) print "stderr:", text env.history.message(redmsg("%s stderr: " % self.plugin_name + quote_html(text))) # examples from CoNTub/bin/HJ: # stderr: BAD INPUT # stderr: Error: Indices of both tubes coincide QObject.connect(simProcess, SIGNAL("readyReadStdout()"), blabout) QObject.connect(simProcess, SIGNAL("readyReadStderr()"), blaberr) started = simProcess.start() ###k what is this code? i forget if true means ok or error if debug_run(): print "qprocess started:",started while 1: ###e need to make it abortable! from which abort button? ideally, one on the dialog; maybe cancel button?? # on exception: simProcess.kill() if simProcess.isRunning(): if debug_run(): print "still running" time.sleep(1) else: time.sleep(0.1) else: break if debug_run(): print "process done i guess: normalExit = %r, (if normal) exitStatus = %r" % \ (simProcess.normalExit(), simProcess.exitStatus()) if 1: QObject.disconnect(simProcess, SIGNAL("readyReadStdout()"), blabout) QObject.disconnect(simProcess, SIGNAL("readyReadStderr()"), blaberr) if simProcess.normalExit(): return simProcess.exitStatus() else: return -1
def setOpen(self, o): if o: self.setIcon(0, folderOpenIcon) else: self.setIcon(0, folderClosedIcon) if o and not self.childCount(): s = self.fullName() thisDir = QDir(s) if not thisDir.isReadable(): self.readable = 0 return files = thisDir.entryInfoList() if files: for f in files: # f is a QFileInfo # f.fileName is '.' or '..' or 'bearings' or... fileName = str(f.fileName()) if fileName == '.' or fileName == '..': continue elif f.isSymLink(): d = QTreeWidgetItem(self, fileName) #, 'Symbolic Link') d.setIcon(0, fileIcon) elif f.isDir(): if fileName == 'CVS': #bruce 060319 skip CVS directories, so developers see same set of directories as end-users # (implements NFR I recently reported) # WARNING: this is only legitimate for some applications of this module. # For now that's ok (we only use it in MMKit). Later this feature should be turned on # by an optional argument to __init__, and generalized to a list of files to not show # or to a filter function. continue d = Directory(self, fileName) else: if f.isFile(): s = 'File' else: s = 'Special' if not fileName[-3:] in self.filterList: continue d = FileItem(self, f.absFilePath(), fileName) d.setIcon(0, fileIcon) qt4todo('QTreeWidgetItem.setOpen(self, o)')
tree.setWindowTitle(tree.tr("Dir View")) tree.resize(250, 480) tree.show() for i in range(1, 4): tree.hideColumn(i) sys.exit(app.exec_()) if False and __name__ == '__main__': a = QApplication(sys.argv) if 1: mw = DirView() a.setMainWidget(mw) mw.setCaption('PyQt Example - Directory Browser') mw.resize(400, 400) #mw.setSelectionMode(QTreeWidget.Extended) root = Directory(mw) #, '/huaicai') root.setOpen(1) mw.show() a.exec_() else: roots = QDir("/download") fiList = roots.entryInfoList() for drv in fiList: print "The file path is: ", str(drv.absFilePath()) a.exec_() # end
def writePrintFiles(self, appdef, folder, app, progress): progress.setText("Writing print layout files") progress.setProgress(0) printFolder = os.path.join(folder, "resources", "print") if not QDir(printFolder).exists(): QDir().mkpath(printFolder) dpis = [72, 150, 300] layoutDefs = [] def getBasicInfo(item): coords = {} pos = item.pos() coords["x"] = pos.x() coords["y"] = pos.y() rect = item.rect() coords["width"] = rect.width() coords["height"] = rect.height() coords["id"] = str(uuid.uuid4()) return coords composers = iface.activeComposers() for i, composer in enumerate(composers): name = composer.composerWindow().windowTitle() layoutSafeName = safeName(name) layoutDef = {} composition = composer.composition() img = composition.printPageAsRaster(0) img = img.scaledToHeight(100, Qt.SmoothTransformation) img.save(os.path.join(printFolder, "%s_thumbnail.png" % layoutSafeName)) layoutDef["width"] = composition.paperWidth() layoutDef["height"] = composition.paperHeight() elements = [] layoutDef["thumbnail"] = "%s_thumbnail.png" % layoutSafeName layoutDef["name"] = name layoutDef["elements"] = elements for item in composition.items(): element = None if isinstance(item, (QgsComposerLegend, QgsComposerShape, QgsComposerScaleBar, QgsComposerArrow)): element = getBasicInfo(item) for dpi in dpis: dpmm = dpi / 25.4 s = QSize(item.rect().width() * dpmm, item.rect().height() * dpmm) img = QImage(s, QImage.Format_ARGB32_Premultiplied) img.fill(Qt.transparent) painter = QPainter(img) painter.scale(dpmm, dpmm) item.paint(painter, None, None) painter.end() img.save(os.path.join(printFolder, "%s_%s_%s.png" % (layoutSafeName, element["id"], str(dpi)))) elif isinstance(item, QgsComposerLabel): element = getBasicInfo(item) element["name"] = item.text() element["size"] = item.font().pointSize() element["font"] = item.font().rawName() elif isinstance(item, QgsComposerMap): element = getBasicInfo(item) grid = item.grid() if grid is not None: element["grid"] = {} element["grid"]["intervalX"] = grid.intervalX() element["grid"]["intervalY"] = grid.intervalY() element["grid"]["crs"] = grid.crs().authid() element["grid"]["annotationEnabled"] = grid.annotationEnabled() elif isinstance(item, QgsComposerPicture): filename = os.path.basename(item.picturePath()) if os.path.exists(filename): element = getBasicInfo(item) shutil.copy(item.pictureFile(), os.path.join(printFolder, filename)) element["file"] = filename if element is not None: element["type"] = item.__class__.__name__[11:].lower() elements.append(element) layoutDefs.append(layoutDef) progress.setProgress(int((i+1)*100.0/len(composers))) app.variables.append("var printLayouts = %s;" % json.dumps(layoutDefs))