def anteriorSiguiente(self): if self.imagenesCarpeta: widget = self.sender().objectName() if widget == "Anterior": self.estadoAnterior = True if self.posicion == 0 else False self.estadoSiguiente = False self.posicion -= 1 if self.posicion > 0 else 0 posicionInternaX, posicionX = 650, -650 else: self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False self.estadoAnterior = False self.posicion += 1 if self.posicion < len(self.imagenesCarpeta)-1 else 0 posicionInternaX, posicionX = -650, 650 if self.estadoAnterior or self.estadoSiguiente: return else: imagen = self.imagenesCarpeta[self.posicion] # Verificar que la carpeta que contiene la imagene exista if not QDir(self.carpetaActual).exists(): self.Eliminar() return elif not QFile.exists(imagen): # Obtener la ruta y el nombre de las imagenes que se encuentren en la # carpeta de la imagen seleccionada imagenes = self.carpetaActual.entryInfoList(["*.jpg", "*.png", "*.ico", "*.bmp"],QDir.Files, QDir.Name) if not imagenes: self.Eliminar() return self.imagenesCarpeta = [imagen.absoluteFilePath() for imagen in imagenes] self.posicion = randint(0, len(self.imagenesCarpeta)-1) self.estadoAnterior = True if self.posicion == 0 else False self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False elif QImage(imagen).isNull(): del self.imagenesCarpeta[self.posicion] if not self.imagenesCarpeta: self.Eliminar() return self.posicion = randint(0, len(self.imagenesCarpeta)-1) self.estadoAnterior = True if self.posicion == 0 else False self.estadoSiguiente = True if self.posicion == len(self.imagenesCarpeta)-1 else False imagen = self.imagenesCarpeta[self.posicion] if self.labelImagen.pixmap(): labelConImagen = self.labelImagen elif self.labelImagenUno.pixmap(): labelConImagen = self.labelImagenUno # Función encargada de bloquear o desbloquear los botones self.bloquearBotones(False) # Nombre y extensión de la imagen nombre = QFileInfo(imagen).fileName() # Label en el que se va a mostrar la imagen labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap() else self.labelImagenUno # Quitar la imagen actual y mostrar la siguiente self.Limpiar(labelConImagen, labelMostrarImagen, QImage(imagen), nombre, posicionInternaX, posicionX)
#!/usr/bin/env python3 from PyQt5.QtWidgets import (QWidget, QLabel, QLineEdit, QSpinBox, QHBoxLayout, QVBoxLayout, QCheckBox, QTableWidget, QAbstractItemView, QPushButton, QGroupBox, QTableWidgetItem) from PyQt5.QtCore import QFileInfo, QCoreApplication import sys, copy v2rayshellDebug = False if __name__ == "__main__": v2rayshellDebug = True # this for debug test path = QFileInfo(sys.argv[0]) srcPath = path.absoluteFilePath().split("/") sys.path.append("/".join(srcPath[:-4])) from bridgehouse.editMap.inbound import logbook class InboundSocksPanel(QWidget): def __init__(self): super().__init__() self.inboundSocksJSONFile = { "auth": "noauth", "accounts": [{ "user": "******", "pass": "******" }], "udp": False,
def strippedName(self, fullFileName): return QFileInfo(fullFileName).fileName()
def accept(self): fileName = self.mUi.fileNameEdit.text() if fileName == '': return if (QFile.exists(fileName)): button = QMessageBox.warning( self, self.tr("Export as Image"), self.tr("%s already exists.\nDo you want to replace it?" % QFileInfo(fileName).fileName()), QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if (button != QMessageBox.Yes): return visibleLayersOnly = self.mUi.visibleLayersOnly.isChecked() useCurrentScale = self.mUi.currentZoomLevel.isChecked() drawTileGrid = self.mUi.drawTileGrid.isChecked() includeBackgroundColor = self.mUi.includeBackgroundColor.isChecked() renderer = self.mMapDocument.renderer() # Remember the current render flags renderFlags = renderer.flags() renderer.setFlag(RenderFlag.ShowTileObjectOutlines, False) mapSize = renderer.mapSize() margins = self.mMapDocument.map().computeLayerOffsetMargins() mapSize.setWidth(mapSize.width() + margins.left() + margins.right()) mapSize.setHeight(mapSize.height() + margins.top() + margins.bottom()) if (useCurrentScale): mapSize *= self.mCurrentScale image = QImage() try: image = QImage(mapSize, QImage.Format_ARGB32_Premultiplied) if (includeBackgroundColor): if (self.mMapDocument.map().backgroundColor().isValid()): image.fill(self.mMapDocument.map().backgroundColor()) else: image.fill(Qt.gray) else: image.fill(Qt.transparent) except: QMessageBox.critical( self, self.tr("Out of Memory"), self. tr("Could not allocate sufficient memory for the image. " "Try reducing the zoom level or using a 64-bit version of Tiled." )) return if (image.isNull()): gigabyte = 1073741824 memory = mapSize.width() * mapSize.height() * 4 gigabytes = memory / gigabyte QMessageBox.critical( self, self.tr("Image too Big"), self. tr("The resulting image would be %d x %d pixels and take %.2f GB of memory. " "Tiled is unable to create such an image. Try reducing the zoom level." % (mapSize.width(), mapSize.height(), gigabytes))) return painter = QPainter(image) if (useCurrentScale): if (smoothTransform(self.mCurrentScale)): painter.setRenderHints(QPainter.SmoothPixmapTransform) painter.setTransform( QTransform.fromScale(self.mCurrentScale, self.mCurrentScale)) renderer.setPainterScale(self.mCurrentScale) else: renderer.setPainterScale(1) painter.translate(margins.left(), margins.top()) for layer in self.mMapDocument.map().layers(): if (visibleLayersOnly and not layer.isVisible()): continue painter.setOpacity(layer.opacity()) painter.translate(layer.offset()) tileLayer = layer objGroup = layer imageLayer = layer tp = type(layer) if tp == TileLayer: renderer.drawTileLayer(painter, tileLayer) elif tp == ObjectGroup: objects = objGroup.objects() if (objGroup.drawOrder() == ObjectGroup.DrawOrder.TopDownOrder ): objects = QList( sorted(objects, key=lambda x: x.y(), reverse=True)) for object in objects: if (object.isVisible()): if (object.rotation() != 0.0): origin = renderer.pixelToScreenCoords_( object.position()) painter.save() painter.translate(origin) painter.rotate(object.rotation()) painter.translate(-origin) color = MapObjectItem.objectColor(object) renderer.drawMapObject(painter, object, color) if (object.rotation() != 0.0): painter.restore() elif tp == ImageLayer: renderer.drawImageLayer(painter, imageLayer) painter.translate(-layer.offset()) if (drawTileGrid): prefs = preferences.Preferences.instance() renderer.drawGrid(painter, QRectF(QPointF(), QSizeF(renderer.mapSize())), prefs.gridColor()) painter.end() # Restore the previous render flags renderer.setFlags(renderFlags) image.save(fileName) self.mPath = QFileInfo(fileName).path() # Store settings for next time s = preferences.Preferences.instance().settings() s.setValue(VISIBLE_ONLY_KEY, visibleLayersOnly) s.setValue(CURRENT_SCALE_KEY, useCurrentScale) s.setValue(DRAW_GRID_KEY, drawTileGrid) s.setValue(INCLUDE_BACKGROUND_COLOR, includeBackgroundColor) super().accept()
def getBaseName(self): if self._fileName: fileinfo = QFileInfo(self._fileName) basename = fileinfo.completeBaseName() return (basename if basename else fileinfo.fileName()) return self.tr("New document")
def __init__(self, gateways): super(InviteReceiverDialog, self).__init__() self.gateways = gateways self.invite_receiver = None self.joined_folders = [] self.setMinimumSize(500, 300) self.mail_closed_icon = QLabel() self.mail_closed_icon.setAlignment(Qt.AlignCenter) self.mail_closed_icon.setPixmap(Pixmap('mail-envelope-closed.png', 128)) self.mail_open_icon = QLabel() self.mail_open_icon.setAlignment(Qt.AlignCenter) self.mail_open_icon.setPixmap(Pixmap('mail-envelope-open.png', 128)) self.folder_icon = QLabel() icon = QFileIconProvider().icon(QFileInfo(config_dir)) self.folder_icon.setPixmap(icon.pixmap(128, 128)) self.folder_icon.setAlignment(Qt.AlignCenter) self.invite_code_widget = InviteCodeWidget(self) self.invite_code_widget.lineedit.go.connect(self.go) # XXX self.tor_label = QLabel() self.tor_label.setToolTip( "This connection is being routed through the Tor network.") self.tor_label.setPixmap(Pixmap('tor-onion.png', 24)) self.checkmark = QLabel() self.checkmark.setAlignment(Qt.AlignCenter) self.checkmark.setPixmap(Pixmap('green_checkmark.png', 32)) self.progressbar = QProgressBar(self) self.progressbar.setValue(0) self.progressbar.setMaximum(6) # XXX self.progressbar.setTextVisible(False) self.message_label = QLabel(' ') self.message_label.setStyleSheet("color: grey") self.message_label.setAlignment(Qt.AlignCenter) self.error_label = QLabel() self.error_label.setStyleSheet("color: red") self.error_label.setAlignment(Qt.AlignCenter) self.close_button = QPushButton("Close") self.close_button.clicked.connect(self.close) layout = QGridLayout(self) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 0, 0) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 2) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 3) layout.addWidget(self.mail_closed_icon, 1, 2, 1, 3) layout.addWidget(self.mail_open_icon, 1, 2, 1, 3) layout.addWidget(self.folder_icon, 1, 2, 1, 3) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 4) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5) layout.addWidget(self.invite_code_widget, 2, 2, 1, 3) layout.addWidget(self.checkmark, 2, 3, 1, 1) layout.addWidget(self.tor_label, 3, 1, 1, 1, Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(self.progressbar, 3, 2, 1, 3) layout.addWidget(self.message_label, 5, 1, 1, 5) layout.addWidget(self.error_label, 5, 2, 1, 3) layout.addWidget(self.close_button, 6, 3) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 7, 1) self.reset()
def main(): # Initialise. defaultContext = "@default" fetchedTor = MetaTranslator() codecForTr = '' codecForSource = '' tsFileNames = [] uiFileNames = [] verbose = False noObsolete = False metSomething = False numFiles = 0 standardSyntax = True metTsFlag = False tr_func = None translate_func = None # Parse the command line. for arg in sys.argv[1:]: if arg == "-ts": standardSyntax = False argc = len(sys.argv) i = 1 while i < argc: arg = sys.argv[i] i += 1 if arg == "-help": printUsage() sys.exit(0) if arg == "-version": sys.stderr.write("pylupdate5 v%s\n" % PYQT_VERSION_STR) sys.exit(0) if arg == "-noobsolete": noObsolete = True continue if arg == "-verbose": verbose = True continue if arg == "-ts": metTsFlag = True continue if arg == "-tr-function": if i >= argc: sys.stderr.write( "pylupdate5 error: missing -tr-function name\n") sys.exit(2) tr_func = sys.argv[i] i += 1 continue if arg == "-translate-function": if i >= argc: sys.stderr.write( "pylupdate5 error: missing -translate-function name\n") sys.exit(2) translate_func = sys.argv[i] i += 1 continue numFiles += 1 fullText = "" if not metTsFlag: f = QFile(arg) if not f.open(QIODevice.ReadOnly): sys.stderr.write("pylupdate5 error: Cannot open file '%s'\n" % arg) sys.exit(1) t = QTextStream(f) fullText = t.readAll() f.close() if standardSyntax: oldDir = QDir.currentPath() QDir.setCurrent(QFileInfo(arg).path()) fetchedTor = MetaTranslator() codecForTr = '' codecForSource = '' tsFileNames = [] uiFileNames = [] for key, value in proFileTagMap(fullText).items(): for t in value.split(' '): if key == "SOURCES": fetchtr_py(QDir.current().absoluteFilePath(t), fetchedTor, defaultContext, True, codecForSource, tr_func, translate_func) metSomething = True elif key == "TRANSLATIONS": tsFileNames.append(QDir.current().absoluteFilePath(t)) metSomething = True elif key in ("CODEC", "DEFAULTCODEC", "CODECFORTR"): codecForTr = t fetchedTor.setCodec(codecForTr) elif key == "CODECFORSRC": codecForSource = t elif key == "FORMS": fetchtr_ui(QDir.current().absoluteFilePath(t), fetchedTor, defaultContext, True) updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose) if not metSomething: sys.stderr.write( "pylupdate5 warning: File '%s' does not look like a " "project file\n" % arg) elif len(tsFileNames) == 0: sys.stderr.write( "pylupdate5 warning: Met no 'TRANSLATIONS' entry in " "project file '%s'\n" % arg) QDir.setCurrent(oldDir) else: if metTsFlag: if arg.lower().endswith(".ts"): fi = QFileInfo(arg) if not fi.exists() or fi.isWritable(): tsFileNames.append(arg) else: sys.stderr.write( "pylupdate5 warning: For some reason, I " "cannot save '%s'\n" % arg) else: sys.stderr.write( "pylupdate5 error: File '%s' lacks .ts extension\n" % arg) else: fi = QFileInfo(arg) if fi.suffix() in ("py", "pyw"): fetchtr_py(fi.absoluteFilePath(), fetchedTor, defaultContext, True, codecForSource, tr_func, translate_func) else: fetchtr_ui(fi.absoluteFilePath(), fetchedTor, defaultContext, True) if not standardSyntax: updateTsFiles(fetchedTor, tsFileNames, codecForTr, noObsolete, verbose) if numFiles == 0: printUsage() sys.exit(1)
def get_path(path: str = None, override: bool = False) -> str: if override: if getattr(sys, 'frozen', False): return os.path.join(sys._MEIPASS, path) return os.path.join(QFileInfo(__file__).absolutePath(), path) return ':assets/%s' % path
segments_copy_without = np.multiply(segments_copy_without, mask) segments_copy_without[segments_copy_without < 0] = -9999.0 print('Saving classification to raster with gdal') result_path = "C:/temp/naip/classified.tif" result_dataset = driver_tiff.Create(result_path, source_dataset_without.RasterXSize, source_dataset_without.RasterYSize, 1, gdal.GDT_Float32) result_dataset.SetGeoTransform(source_dataset_without.GetGeoTransform()) result_dataset.SetProjection(source_dataset_without.GetProjection()) result_dataset.GetRasterBand(1).SetNoDataValue(-9999.0) result_dataset.GetRasterBand(1).WriteArray(segments_copy_without) result_dataset = None fileInfo = QFileInfo(result_path) baseName = fileInfo.baseName() layer = QgsRasterLayer(result_path, baseName) pcolor = [] pcolor.append(QgsColorRampShader.ColorRampItem(1, QColor("#d2ca97"))) pcolor.append(QgsColorRampShader.ColorRampItem(2, QColor("#f7f7f7"))) pcolor.append(QgsColorRampShader.ColorRampItem(3, QColor("#a1d99b"))) pcolor.append(QgsColorRampShader.ColorRampItem(4, QColor("#41ab5d"))) pcolor.append(QgsColorRampShader.ColorRampItem(5, QColor("#006d2c"))) pcolor.append(QgsColorRampShader.ColorRampItem(6, QColor("#00441b"))) renderer = QgsPalettedRasterRenderer(layer.dataProvider(), 1, QgsPalettedRasterRenderer.colorTableToClassData(pcolor)) layer.setRenderer(renderer)
def select_3d_file(self): """Select 3d file""" file_3d, _filter_3d = QFileDialog.getOpenFileName( self.dlg, "Select .3d file ", self.path_3d, '*.3d') self.dlg.selectedFile.setText(file_3d) self.path_3d = QFileInfo(file_3d).path() # memorise path selection
def load_stylesheet(qssfile: str) -> None: if QFileInfo(qssfile).exists(): qss = QFile(qssfile) qss.open(QFile.ReadOnly | QFile.Text) qApp.setStyleSheet(QTextStream(qss).readAll())
def mkdir(self, filename): dir = QFileInfo(filename).dir() if not dir.exists(): QDir().mkpath(dir.absolutePath())
def showWatchFileInfo(self): if self.useWatchFile: fileInfo = QFileInfo(self.watchFileName) infoText = 'use code from file:\n' + self.watchFileName + '\n' + ( '(exists)' if fileInfo.exists() else '(doesn\'t exist)') self.codeEditor.setPlainText(infoText)
def __init__(self, filename='', wins=None, parent=None): global g_allFuncList super(QsciScintilla, self).__init__(parent) self.win = wins self.jumpName = '' self.list_line = [] self.Font = QFont() # self.Font = self.win.EditFont # 采用主窗口传入的字体 self.Font.setFixedPitch(True) #self.loadFile(self.filename) self.setFont(self.Font) # 1.设置文档的编码格式为 “utf8” ,换行符为 windows 【可选linux,Mac】 self.setUtf8(True) self.setEolMode( QsciScintilla.SC_EOL_CRLF) # 文件中的每一行都以EOL字符结尾(换行符为 \r \n) # 2.设置括号匹配模式 self.setBraceMatching(QsciScintilla.StrictBraceMatch) # # 3.设置 Tab 键功能 self.setIndentationsUseTabs(True) # 行首缩进采用Tab键,反向缩进是Shift +Tab self.setIndentationWidth(4) # 行首缩进宽度为4个空格 self.setIndentationGuides(True) # 显示虚线垂直线的方式来指示缩进 self.setTabIndents(True) # 编辑器将行首第一个非空格字符推送到下一个缩进级别 self.setAutoIndent(True) # 插入新行时,自动缩进将光标推送到与前一个相同的缩进级别 self.setBackspaceUnindents(True) self.setTabWidth(4) # Tab 等于 4 个空格 # 4.设置光标 self.setCaretWidth(2) # 光标宽度(以像素为单位),0表示不显示光标 self.setCaretForegroundColor(QColor("darkCyan")) # 光标颜色 self.setCaretLineVisible(True) # 是否高亮显示光标所在行 self.setCaretLineBackgroundColor(QColor('#FFCFCF')) # 光标所在行的底色 # 5.设置页边特性。 这里有3种Margin:[0]行号 [1]改动标识 [2]代码折叠 # 5.1 设置行号 self.setMarginsFont(self.Font) # 行号字体 self.setMarginLineNumbers(0, True) # 设置标号为0的页边显示行号 self.setMarginWidth(0, '00000') # 行号宽度 self.setMarkerForegroundColor(QColor("#FFFFFF"), 0) # 5.2 设置改动标记 self.setMarginType(1, QsciScintilla.SymbolMargin) # 设置标号为1的页边用于显示改动标记 self.setMarginWidth(1, "0000") # 改动标记占用的宽度 img = QPixmap("test1.png") # 改动标记图标,大小是48 x 48 sym_1 = img.scaled(QSize(16, 16)) # 图标缩小为 16 x 16 self.markerDefine(sym_1, 0) self.setMarginMarkerMask(1, 0b1111) self.setMarkerForegroundColor(QColor("#ee1111"), 1) # 00ff00 # 5.3 设置代码自动折叠区域 self.setFolding(QsciScintilla.PlainFoldStyle) self.setMarginWidth(2, 12) # 5.3.1 设置代码折叠和展开时的页边标记 - + self.markerDefine(QsciScintilla.Minus, QsciScintilla.SC_MARKNUM_FOLDEROPEN) self.markerDefine(QsciScintilla.Plus, QsciScintilla.SC_MARKNUM_FOLDER) self.markerDefine(QsciScintilla.Minus, QsciScintilla.SC_MARKNUM_FOLDEROPENMID) self.markerDefine(QsciScintilla.Plus, QsciScintilla.SC_MARKNUM_FOLDEREND) # 5.3.2 设置代码折叠后,+ 的颜色FFFFFF self.setMarkerBackgroundColor(QColor("#FFBCBC"), QsciScintilla.SC_MARKNUM_FOLDEREND) self.setMarkerForegroundColor(QColor("red"), QsciScintilla.SC_MARKNUM_FOLDEREND) # 6.语法高亮显示 # 6.1语法高亮的设置见 MyLexerCPP类 源码 self.lexer = MyLexerCPP(self) self.setLexer(self.lexer) # 6.2设置自动补全 self.mod = False self.__api = QsciAPIs(self.lexer) # SDCC编译器的关键字 列表 sdcc_kwlist = [ '__data', '__idata', '__pdata', '__xdata', '__code', '__bit', '__sbit', '__sfr', 'u8', 'u16', 'WORD', 'BYTE', 'define', 'include', '__interrupt', 'auto', 'double', 'int', 'struct', 'break', 'else', 'long', 'switch', 'case', 'enum', 'register', 'typedef', 'default', 'char', 'extern', 'return', 'union', 'const', 'float', 'short', 'unsigned', 'continue', 'for', 'signed', 'void', 'goto', 'sizeof', 'volatile', 'do', 'while', 'static', 'if' ] autocompletions = keyword.kwlist + sdcc_kwlist # autocompletions = sdcc_kwlist print("sciisodk") for ac in autocompletions: self.__api.add(ac) self.__api.prepare() self.autoCompleteFromAll() self.setAutoCompletionSource(QsciScintilla.AcsAll) # 自动补全所以地方出现的 self.setAutoCompletionCaseSensitivity(True) # 设置自动补全大小写敏感 self.setAutoCompletionThreshold(1) # 输入1个字符,就出现自动补全 提示 self.setAutoCompletionReplaceWord(False) self.setAutoCompletionUseSingle(QsciScintilla.AcusExplicit) self.setAttribute(Qt.WA_DeleteOnClose) # 设置函数名为关键字2 KeyWord = sdcc_kwlistcc ;KeywordSet2 = 函数名 self.SendScintilla(QsciScintilla.SCI_SETKEYWORDS, 0, " ".join(sdcc_kwlist).encode(encoding='utf-8')) self.SendScintilla(QsciScintilla.SCI_STYLESETFORE, QsciLexerCPP.KeywordSet2, 0x7f0000) # self.SendScintilla(QsciScintilla.SCI_SETKEYWORDS, 1, " ".join(g_allFuncList).encode(encoding='utf-8')) self.filename = filename if self.filename == '': self.filename = str("未命名-{0}".format(SciTextEdit.NextId)) SciTextEdit.NextId += 1 self.setModified(False) # 设置文档窗口的标题 self.setWindowTitle(QFileInfo(self.filename).fileName()) # 将槽函数链接到文本改动的信号 self.textChanged.connect(self.textChangedAction) # 给文档窗口添加右键菜单 self.setContextMenuPolicy(Qt.CustomContextMenu) # self.customContextMenuRequested.connect(self.RightMenu)
def createActions(self): root = QFileInfo(__file__).absolutePath()
def __init__(self, gui): super(MainWindow, self).__init__() self.gui = gui self.gateways = [] self.welcome_dialog = None self.recovery_key_exporter = None self.setWindowTitle(APP_NAME) self.setMinimumSize(QSize(600, 400)) self.setUnifiedTitleAndToolBarOnMac(True) self.setContextMenuPolicy(Qt.NoContextMenu) if sys.platform == 'darwin': # To disable the broken/buggy "full screen" mode on macOS. # See https://github.com/gridsync/gridsync/issues/241 self.setWindowFlags(Qt.Dialog) self.shortcut_new = QShortcut(QKeySequence.New, self) self.shortcut_new.activated.connect(self.show_welcome_dialog) self.shortcut_open = QShortcut(QKeySequence.Open, self) self.shortcut_open.activated.connect(self.select_folder) self.shortcut_preferences = QShortcut(QKeySequence.Preferences, self) self.shortcut_preferences.activated.connect( self.gui.show_preferences_window) self.shortcut_close = QShortcut(QKeySequence.Close, self) self.shortcut_close.activated.connect(self.close) self.shortcut_quit = QShortcut(QKeySequence.Quit, self) self.shortcut_quit.activated.connect(self.confirm_quit) self.central_widget = CentralWidget(self.gui) self.setCentralWidget(self.central_widget) font = Font(8) folder_icon_default = QFileIconProvider().icon(QFileInfo(config_dir)) folder_icon_composite = CompositePixmap( folder_icon_default.pixmap(256, 256), resource('green-plus.png')) folder_icon = QIcon(folder_icon_composite) folder_action = QAction(folder_icon, "Add Folder", self) folder_action.setToolTip("Add a Folder...") folder_action.setFont(font) folder_action.triggered.connect(self.select_folder) grid_invites_enabled = True features_settings = settings.get('features') if features_settings: grid_invites = features_settings.get('grid_invites') if grid_invites and grid_invites.lower() == 'false': grid_invites_enabled = False if grid_invites_enabled: invites_action = QAction(QIcon(resource('invite.png')), "Invites", self) invites_action.setToolTip("Enter or Create an Invite Code") invites_action.setFont(font) enter_invite_action = QAction(QIcon(), "Enter Invite Code...", self) enter_invite_action.setToolTip("Enter an Invite Code...") enter_invite_action.triggered.connect(self.open_invite_receiver) create_invite_action = QAction(QIcon(), "Create Invite Code...", self) create_invite_action.setToolTip("Create on Invite Code...") create_invite_action.triggered.connect( self.open_invite_sender_dialog) invites_menu = QMenu(self) invites_menu.addAction(enter_invite_action) invites_menu.addAction(create_invite_action) invites_button = QToolButton(self) invites_button.setDefaultAction(invites_action) invites_button.setMenu(invites_menu) invites_button.setPopupMode(2) invites_button.setStyleSheet( 'QToolButton::menu-indicator { image: none }') invites_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) else: invite_action = QAction(QIcon(resource('invite.png')), "Enter Code", self) invite_action.setToolTip("Enter an Invite Code...") invite_action.setFont(font) invite_action.triggered.connect(self.open_invite_receiver) spacer_left = QWidget() spacer_left.setSizePolicy(QSizePolicy.Expanding, 0) self.combo_box = ComboBox() self.combo_box.currentIndexChanged.connect(self.on_grid_selected) spacer_right = QWidget() spacer_right.setSizePolicy(QSizePolicy.Expanding, 0) history_action = QAction(QIcon(resource('time.png')), 'History', self) history_action.setToolTip("Show/Hide History") history_action.setFont(font) history_action.triggered.connect(self.on_history_button_clicked) self.history_button = QToolButton(self) self.history_button.setDefaultAction(history_action) self.history_button.setCheckable(True) self.history_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) recovery_action = QAction(QIcon(resource('key.png')), "Recovery", self) recovery_action.setToolTip("Import or Export a Recovery Key") recovery_action.setFont(font) import_action = QAction(QIcon(), "Import Recovery Key...", self) import_action.setToolTip("Import Recovery Key...") import_action.triggered.connect(self.import_recovery_key) export_action = QAction(QIcon(), "Export Recovery Key...", self) export_action.setToolTip("Export Recovery Key...") export_action.setShortcut(QKeySequence.Save) export_action.triggered.connect(self.export_recovery_key) recovery_menu = QMenu(self) recovery_menu.addAction(import_action) recovery_menu.addAction(export_action) recovery_button = QToolButton(self) recovery_button.setDefaultAction(recovery_action) recovery_button.setMenu(recovery_menu) recovery_button.setPopupMode(2) recovery_button.setStyleSheet( 'QToolButton::menu-indicator { image: none }') recovery_button.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolbar = self.addToolBar('') p = self.palette() dimmer_grey = BlendedColor(p.windowText().color(), p.window().color(), 0.7).name() if sys.platform != 'darwin': self.toolbar.setStyleSheet(""" QToolBar {{ border: 0px }} QToolButton {{ color: {} }} """.format(dimmer_grey)) else: self.toolbar.setStyleSheet( "QToolButton {{ color: {} }}".format(dimmer_grey)) self.toolbar.setToolButtonStyle(Qt.ToolButtonTextUnderIcon) self.toolbar.setIconSize(QSize(24, 24)) self.toolbar.setMovable(False) self.toolbar.addAction(folder_action) if grid_invites_enabled: self.toolbar.addWidget(invites_button) else: self.toolbar.addAction(invite_action) self.toolbar.addWidget(spacer_left) self.toolbar.addWidget(self.combo_box) self.toolbar.addWidget(spacer_right) self.toolbar.addWidget(self.history_button) self.toolbar.addWidget(recovery_button) if sys.platform != 'win32': # Text is getting clipped on Windows 10 for action in self.toolbar.actions(): widget = self.toolbar.widgetForAction(action) if isinstance(widget, QToolButton): widget.setMaximumWidth(68) self.active_invite_sender_dialogs = [] self.active_invite_receiver_dialogs = [] self.pending_news_message = ()
def _database_downloaded(self, branch, progress, reply): """Called when the file has finished downloading.""" # Close the progress dialog progress.close() # Get the absolute path of the file app_path = QCoreApplication.applicationFilePath() app_name = QFileInfo(app_path).fileName() file_ext = "i64" if "64" in app_name else "idb" file_name = "%s_%s.%s" % (branch.repo, branch.name, file_ext) file_path = self._plugin.user_resource("files", file_name) # Write the packet content to disk with open(file_path, "wb") as output_file: output_file.write(reply.content) self._plugin.logger.info("Saved file %s" % file_name) # Save the old database database = ida_loader.get_path(ida_loader.PATH_TYPE_IDB) if database: ida_loader.save_database(database, ida_loader.DBFL_TEMP) # This is a very ugly hack used to open a database into IDA. We don't # have any function for this in the SDK, so I sorta hijacked the # snapshot functionality in this effect. # Get the library to call functions not present in the bindings idaname = "ida64" if "64" in app_name else "ida" if sys.platform == "win32": dllname, dlltype = idaname + ".dll", ctypes.windll elif sys.platform == "linux2": dllname, dlltype = "lib" + idaname + ".so", ctypes.cdll elif sys.platform == "darwin": dllname, dlltype = "lib" + idaname + ".dylib", ctypes.cdll dllpath = ida_diskio.idadir(None) if not os.path.exists(os.path.join(dllpath, dllname)): dllpath = dllpath.replace("ida64", "ida") dll = dlltype[os.path.join(dllpath, dllname)] # Close the old database using the term_database library function old_path = ida_loader.get_path(ida_loader.PATH_TYPE_IDB) if old_path: dll.term_database() # Open the new database using the init_database library function # This call only won't be enough because the user interface won't # be initialized, this is why the snapshot functionality is used for args = [app_name, file_path] argc = len(args) argv = (ctypes.POINTER(ctypes.c_char) * (argc + 1))() for i, arg in enumerate(args): arg = arg.encode("utf-8") argv[i] = ctypes.create_string_buffer(arg) v = ctypes.c_int(0) av = ctypes.addressof(v) pv = ctypes.cast(av, ctypes.POINTER(ctypes.c_int)) dll.init_database(argc, argv, pv) # Create a temporary copy of the new database because we cannot use # the snapshot functionality to restore the currently opened database file_ext = ".i64" if "64" in app_name else ".idb" tmp_file, tmp_path = tempfile.mkstemp(suffix=file_ext) shutil.copyfile(file_path, tmp_path) # This hook is used to delete the temporary database when all done class UIHooks(ida_kernwin.UI_Hooks): def database_inited(self, is_new_database, idc_script): self.unhook() os.close(tmp_file) if os.path.exists(tmp_path): os.remove(tmp_path) hooks = UIHooks() hooks.hook() # Call the restore_database_snapshot library function # This will initialize the user interface, completing the process s = ida_loader.snapshot_t() s.filename = tmp_path # Use the temporary database ida_kernwin.restore_database_snapshot(s, None, None)
def slot_get_save_mask(self): str, _ = QFileDialog.getSaveFileName(self, "Save file", '../../data/', self.tr("mask(*.png)")) self.lineEdit_mask.setText(str) tp_dir = QFileInfo(str).path() QDir.setCurrent(tp_dir)
def __init__(self, gateway, gui, folder_names=None): super(InviteSenderDialog, self).__init__() self.gateway = gateway self.gui = gui self.folder_names = folder_names self.folder_names_humanized = humanized_list(folder_names, 'folders') self.settings = {} self.pending_invites = [] self.use_tor = self.gateway.use_tor self.setMinimumSize(500, 300) header_icon = QLabel(self) if self.folder_names: icon = QFileIconProvider().icon( QFileInfo( self.gateway.get_magic_folder_directory( self.folder_names[0]))) else: icon = QIcon(os.path.join(gateway.nodedir, 'icon')) if not icon.availableSizes(): icon = QIcon(resource('tahoe-lafs.png')) header_icon.setPixmap(icon.pixmap(50, 50)) header_text = QLabel(self) if self.folder_names: header_text.setText(self.folder_names_humanized) else: header_text.setText(self.gateway.name) header_text.setFont(Font(18)) header_text.setAlignment(Qt.AlignCenter) header_layout = QGridLayout() header_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1) header_layout.addWidget(header_icon, 1, 2) header_layout.addWidget(header_text, 1, 3) header_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 4) self.subtext_label = QLabel(self) self.subtext_label.setFont(Font(10)) self.subtext_label.setStyleSheet("color: grey") self.subtext_label.setWordWrap(True) self.subtext_label.setAlignment(Qt.AlignCenter) self.noise_label = QLabel() font = Font(16) font.setFamily("Courier") font.setStyleHint(QFont.Monospace) self.noise_label.setFont(font) self.noise_label.setStyleSheet("color: grey") self.noise_timer = QTimer() self.noise_timer.timeout.connect( lambda: self.noise_label.setText(b58encode(os.urandom(16)))) self.noise_timer.start(75) self.code_label = QLabel() self.code_label.setFont(Font(18)) self.code_label.setTextInteractionFlags(Qt.TextSelectableByMouse) self.code_label.hide() self.box_title = QLabel(self) self.box_title.setAlignment(Qt.AlignCenter) self.box_title.setFont(Font(16)) self.box = QGroupBox() self.box.setAlignment(Qt.AlignCenter) self.box.setStyleSheet('QGroupBox {font-size: 16px}') self.copy_button = QToolButton() self.copy_button.setIcon(QIcon(resource('copy.png'))) self.copy_button.setToolTip("Copy to clipboard") self.copy_button.setStyleSheet('border: 0px; padding: 0px;') self.copy_button.hide() box_layout = QGridLayout(self.box) box_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1) box_layout.addWidget(self.noise_label, 1, 2) box_layout.addWidget(self.code_label, 1, 3) box_layout.addWidget(self.copy_button, 1, 4) box_layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5) self.close_button = QPushButton("Close and cancel invite") self.close_button.setAutoDefault(False) self.checkmark = QLabel() self.checkmark.setPixmap(Pixmap('green_checkmark.png', 32)) self.checkmark.setAlignment(Qt.AlignCenter) self.checkmark.hide() self.tor_label = QLabel() self.tor_label.setToolTip( "This connection is being routed through the Tor network.") self.tor_label.setPixmap(Pixmap('tor-onion.png', 24)) self.tor_label.hide() self.progress_bar = QProgressBar() self.progress_bar.setMaximum(2) self.progress_bar.setTextVisible(False) self.progress_bar.hide() layout = QGridLayout(self) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 0, 0) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 1) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 2) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 3) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 4) layout.addItem(QSpacerItem(0, 0, QSizePolicy.Expanding, 0), 1, 5) layout.addLayout(header_layout, 1, 3) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 2, 1) layout.addWidget(self.box_title, 3, 2, 1, 3) layout.addWidget(self.checkmark, 3, 3) layout.addWidget(self.tor_label, 4, 1, 1, 1, Qt.AlignRight | Qt.AlignVCenter) layout.addWidget(self.box, 4, 2, 1, 3) layout.addWidget(self.progress_bar, 4, 2, 1, 3) layout.addWidget(self.subtext_label, 5, 2, 1, 3) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 6, 1) layout.addWidget(self.close_button, 7, 3) layout.addItem(QSpacerItem(0, 0, 0, QSizePolicy.Expanding), 8, 1) self.copy_button.clicked.connect(self.on_copy_button_clicked) self.close_button.clicked.connect(self.close) self.set_box_title("Generating invite code...") self.subtext_label.setText("Creating folder invite(s)...\n\n") if self.use_tor: self.tor_label.show() self.progress_bar.setStyleSheet( 'QProgressBar::chunk {{ background-color: {}; }}'.format( TOR_PURPLE)) self.go() # XXX
def getAppPath(self) -> str: if getattr(sys, 'frozen', False): return sys._MEIPASS return QFileInfo(__file__).absolutePath()
def open_file(path): QDesktopServices.openUrl( QUrl.fromLocalFile(QFileInfo(path).absoluteFilePath()))
def getPath(self): return os.path.join(QFileInfo.absolutePath(QFileInfo(__file__)), 'dualscale.ui')
def updateButtonText(self): if self.fileName: self.setText(QFileInfo(self.fileName).fileName()) else: self.setText(self.defaultText)
def anteriorSiguiente(self): if self.imagenesCarpeta: widget = Form.sender().objectName() if widget == "Anterior": self.estadoAnterior = True if self.position == 0 else False self.estadoSiguiente = False self.position -= 1 if self.position > 0 else 0 posicionInternaX, posicionX = 650, -650 else: self.estadoSiguiente = True if self.position == len( self.imagenesCarpeta) - 1 else False self.estadoAnterior = False self.position += 1 if self.position < len( self.imagenesCarpeta) - 1 else 0 posicionInternaX, posicionX = -650, 650 if self.estadoAnterior or self.estadoSiguiente: return else: imagen = self.imagenesCarpeta[self.position] # Verificar que la carpeta que contiene la imagene exista if not QDir(self.carpetaActual).exists(): self.Eliminar() return elif not QFile.exists(imagen): # Obtener la ruta y el nombre de las imagenes que se encuentren en la # carpeta de la imagen seleccionada imagenes = self.carpetaActual.entryInfoList( ["*.jpg", "*.png", "*.ico", "*.bmp"], QDir.Files, QDir.Name) if not imagenes: self.Eliminar() return self.imagenesCarpeta = [ imagen.absoluteFilePath() for imagen in imagenes ] self.position = randint(0, len(self.imagenesCarpeta) - 1) self.estadoAnterior = True if self.position == 0 else False self.estadoSiguiente = True if self.position == len( self.imagenesCarpeta) - 1 else False elif QImage(imagen).isNull(): del self.imagenesCarpeta[self.position] if not self.imagenesCarpeta: self.Eliminar() return self.position = randint(0, len(self.imagenesCarpeta) - 1) self.estadoAnterior = True if self.position == 0 else False self.estadoSiguiente = True if self.position == len( self.imagenesCarpeta) - 1 else False imagen = self.imagenesCarpeta[self.position] if self.labelImagen.pixmap(): labelConImagen = self.labelImagen elif self.labelImagenUno.pixmap(): labelConImagen = self.labelImagenUno # Function responsible for locking or unlocking buttons self.bloquearBotones(False) # Image name and extension nombre = QFileInfo(imagen).fileName() # Label in which the image will be displayed labelMostrarImagen = self.labelImagen if self.labelImagenUno.pixmap( ) else self.labelImagenUno # Remove current image and show next self.Limpiar(labelConImagen, labelMostrarImagen, QImage(imagen), nombre, posicionInternaX, posicionX)
def __newResource(self): """ Private slot to handle the New Resource menu action. """ itm = self.model().item(self.currentIndex()) if itm is None: path = self.project.ppath else: try: path = os.path.dirname(itm.fileName()) except AttributeError: try: path = itm.dirName() except AttributeError: path = os.path.join(self.project.ppath, itm.data(0)) if self.hooks["newResource"] is not None: self.hooks["newResource"](path) else: fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( self, self.tr("New Resource"), path, self.tr("Qt Resource Files (*.qrc)"), "", E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) if not fname: # user aborted or didn't enter a filename return ext = QFileInfo(fname).suffix() if not ext: ex = selectedFilter.split("(*")[1].split(")")[0] if ex: fname += ex if os.path.exists(fname): res = E5MessageBox.yesNo( self, self.tr("New Resource"), self.tr("The file already exists! Overwrite it?"), icon=E5MessageBox.Warning) if not res: # user selected to not overwrite return try: if self.project.useSystemEol(): newline = None else: newline = self.project.getEolString() rcfile = open(fname, 'w', encoding="utf-8", newline=newline) rcfile.write('<!DOCTYPE RCC>\n') rcfile.write('<RCC version="1.0">\n') rcfile.write('<qresource>\n') rcfile.write('</qresource>\n') rcfile.write('</RCC>\n') rcfile.close() except IOError as e: E5MessageBox.critical( self, self.tr("New Resource"), self.tr("<p>The new resource file <b>{0}</b> could not" " be created.<br>Problem: {1}</p>").format( fname, str(e))) return self.project.appendFile(fname) self.sourceFile.emit(fname)
def get_filesize(self, path): if path.startswith('file:///'): path = path.strip('file:///') file = QFileInfo(QFile(path)) self._filesize = file.size() return self._filesize
def createActions(self): root = QFileInfo(__file__).absolutePath() self.newAct = QAction(QIcon(root + '/images/new.png'), "&New", self, shortcut=QKeySequence.New, statusTip="Create a new file", triggered=self.newFile) self.openAct = QAction(QIcon(root + '/images/open.png'), "&Open...", self, shortcut=QKeySequence.Open, statusTip="Open an existing file", triggered=self.open) self.saveAct = QAction(QIcon(root + '/images/save.png'), "&Save", self, shortcut=QKeySequence.Save, statusTip="Save the document to disk", triggered=self.save) self.saveAsAct = QAction( "Save &As...", self, shortcut=QKeySequence.SaveAs, statusTip="Save the document under a new name", triggered=self.saveAs) self.exitAct = QAction("E&xit", self, shortcut="Ctrl+Q", statusTip="Exit the application", triggered=self.close) self.cutAct = QAction( QIcon(root + '/images/cut.png'), "Cu&t", self, shortcut=QKeySequence.Cut, statusTip="Cut the current selection's contents to the clipboard", triggered=self.textEdit.cut) self.copyAct = QAction( QIcon(root + '/images/copy.png'), "&Copy", self, shortcut=QKeySequence.Copy, statusTip="Copy the current selection's contents to the clipboard", triggered=self.textEdit.copy) self.pasteAct = QAction( QIcon(root + '/images/paste.png'), "&Paste", self, shortcut=QKeySequence.Paste, statusTip= "Paste the clipboard's contents into the current selection", triggered=self.textEdit.paste) self.aboutAct = QAction("&About", self, statusTip="Show the application's About box", triggered=self.about) self.aboutQtAct = QAction("About &Qt", self, statusTip="Show the Qt library's About box", triggered=QApplication.instance().aboutQt) self.cutAct.setEnabled(False) self.copyAct.setEnabled(False) self.textEdit.copyAvailable.connect(self.cutAct.setEnabled) self.textEdit.copyAvailable.connect(self.copyAct.setEnabled)
def get_filename(self, path): if path.startswith('file:///'): path = path.strip('file:///') file = QFileInfo(QFile(path)) return file.fileName()
def processClick(self): startDir = (QFileInfo(self.fileName).absolutePath() if self.fileName else '') self.fileName = QFileDialog.getOpenFileName( self, self.tr('Select file to open'), startDir)[0] self.updateButtonText()
def initbridgeJSONData(self, v2rayshellConfigFileName=False): """ open v2rayshell config JSON File. save it to memory. """ if (v2rayshellConfigFileName): self.v2rayshellConfigFileName = v2rayshellConfigFileName self.clear() fileInfo = QFileInfo(self.v2rayshellConfigFileName) self.fileName = fileInfo.fileName() self.openFile = QFile(self.v2rayshellConfigFileName) self.openFile.open(QIODevice.ReadOnly | QIODevice.Text) if self.openFile.error() != self.openFile.NoError: self.msgBox.information( QDialog().move(self.fly), "{}".format(self.fileName), self.translate("bridgetreasureChest", "Unable to open the file {}: {}.").format( self.v2rayshellConfigFileName, self.openFile.errorString())) self.msgBox.move(QApplication.desktop().screen().rect().center() - self.msgBox.rect().center()) self.openFile = None return JSONData = str(self.openFile.readAll(), "utf-8") try: JSONData = json.loads(JSONData) except ValueError as e: self.msgBox.information( QDialog().move(self.fly), self.translate("bridgetreasureChest", "Parse JSON Data Error"), self.translate("bridgetreasureChest", "Unable to parse {}: error:{}.").format( self.fileName, e)) self.msgBox.move(QApplication.desktop().screen().rect().center() - self.msgBox.rect().center()) self.openFile = None JSONData = None return try: JSONData["preferences"] except Exception: JSONData["preferences"] = {} try: JSONData["configFiles"] except Exception: JSONData["configFiles"] = [] if (len(JSONData["preferences"]) > 0): try: JSONData["preferences"]["v2ray-core"] except Exception: JSONData["preferences"]["v2ray-core"] = False else: self.setV2raycoreVersion(JSONData["preferences"]["v2ray-core"]) try: JSONData["preferences"]["v2ray-coreFilePath"] except Exception: JSONData["preferences"]["v2ray-coreFilePath"] = False else: self.setV2raycoreFilePath( JSONData["preferences"]["v2ray-coreFilePath"]) try: JSONData["preferences"]["language"] except Exception: JSONData["preferences"]["language"] = "en_US" else: self.setLanguage(JSONData["preferences"]["language"]) try: JSONData["preferences"]["startup"] except Exception: JSONData["preferences"]["startup"] = False else: self.setStartup(JSONData["preferences"]["startup"]) try: JSONData["preferences"]["connection"] except Exception: JSONData["preferences"]["connection"] = {} if not JSONData["preferences"]["connection"]: JSONData["preferences"]["connection"] = {} try: JSONData["preferences"]["connection"]["enable"] except Exception: JSONData["preferences"]["connection"]["enable"] = False try: JSONData["preferences"]["connection"]["connect"] except Exception: JSONData["preferences"]["connection"]["connect"] = "switch" try: JSONData["preferences"]["connection"]["interval"] except Exception: JSONData["preferences"]["connection"]["interval"] = 60 try: JSONData["preferences"]["connection"]["timeout"] except Exception: JSONData["preferences"]["connection"]["timeout"] = 5 try: JSONData["preferences"]["connection"]["trytimes"] except Exception: JSONData["preferences"]["connection"]["trytimes"] = 3 self.setConnection(JSONData["preferences"]["connection"]) try: JSONData["update"] except Exception: JSONData["update"] = {} try: JSONData["update"]["enable"] except Exception: JSONData["update"]["enable"] = False try: JSONData["update"]["schedule"] except Exception: JSONData["update"]["schedule"] = {} try: JSONData["update"]["schedule"]["date"] except Exception: JSONData["update"]["schedule"]["date"] = 8 try: JSONData["update"]["schedule"]["time"] except Exception: JSONData["update"]["schedule"]["time"] = 3 try: JSONData["update"]["install"] except Exception: JSONData["update"]["install"] = "manual" try: JSONData["update"]["downloadFile"] except Exception: JSONData["update"]["downloadFile"] = "v2ray-windows-64.zip" try: JSONData["update"]["silentInstall"] except Exception: JSONData["update"]["silentInstall"] = True self.setUpdateSchedule(JSONData["update"]) if (len(JSONData["configFiles"]) > 0): for i in JSONData["configFiles"]: try: self.setV2raycoreconfigFiles(i["enable"], i["hostName"], i["configFileName"]) except Exception: continue self.allLanguages = copy.deepcopy(self.findQmFiles()) self.openFile.close()