class AttachmentView(QListView): """ A dockWidget displaying attachments of the current note. """ def __init__(self, parent=None): super(AttachmentView, self).__init__(parent) self.parent = parent self.settings = parent.settings self.model = QFileSystemModel() self.model.setFilter(QDir.Files) self.model.setRootPath(self.settings.attachmentPath) self.setModel(self.model) # self.setRootIndex(self.model.index(self.settings.attachmentPath)) self.setViewMode(QListView.IconMode) self.setUniformItemSizes(True) self.setResizeMode(QListView.Adjust) self.setItemDelegate(AttachmentItemDelegate(self)) self.clicked.connect(self.click) def contextMenuEvent(self, event): menu = QMenu() indice = self.selectedIndexes() if len(indice): menu.addAction("Insert into note", self.insert) menu.addAction("Delete", self.delete) else: pass menu.exec_(event.globalPos()) def mousePressEvent(self, event): """ Trigger click() when an item is pressed. """ self.clearSelection() QListView.mousePressEvent(self, event) def mouseReleaseEvent(self, event): """ Trigger click() when an item is pressed. """ self.clearSelection() QListView.mouseReleaseEvent(self, event) def insert(self): indice = self.selectedIndexes() for i in indice: filePath = self.model.filePath(i) filePath = filePath.replace(self.settings.notebookPath, "..") fileName = os.path.basename(filePath) text = "![%s](%s)" % (fileName, filePath) self.parent.notesEdit.insertPlainText(text) def delete(self): indice = self.selectedIndexes() for i in indice: filePath = self.model.filePath(i) QFile(filePath).remove() def click(self, index): self.setCurrentIndex(index)
class Explorador(custom_dock.CustomDock): def __init__(self, parent=None): custom_dock.CustomDock.__init__(self) self.explorador = QTreeView() self.setWidget(self.explorador) self.explorador.header().setHidden(True) self.explorador.setAnimated(True) # Modelo self.modelo = QFileSystemModel(self.explorador) path = QDir.toNativeSeparators(QDir.homePath()) self.modelo.setRootPath(path) self.explorador.setModel(self.modelo) self.modelo.setNameFilters(["*.c", "*.h", "*.s"]) self.explorador.setRootIndex(QModelIndex(self.modelo.index(path))) self.modelo.setNameFilterDisables(False) # Se ocultan algunas columnas self.explorador.hideColumn(1) self.explorador.hideColumn(2) self.explorador.hideColumn(3) # Conexion self.explorador.doubleClicked.connect(self._abrir_archivo) EDIS.cargar_lateral("explorador", self) def _abrir_archivo(self, i): if not self.modelo.isDir(i): indice = self.modelo.index(i.row(), 0, i.parent()) archivo = self.modelo.filePath(indice) principal = EDIS.componente("principal") principal.abrir_archivo(archivo)
class OrLogsListView(QListView): def __init__(self, parent=None): super(OrLogsListView, self).__init__(parent) self.model = QFileSystemModel() self.model.sort(3, Qt.DescendingOrder) self.model.setFilter(QDir.Files) self.setModel(self.model) def mouseDoubleClickEvent(self, event): """method override""" QListView.mouseDoubleClickEvent(self, event) self.clicked() def getSelectedPath(self): """Return selected filename""" index = self.currentIndex() if index: return os.path.normpath(self.model.filePath(index)) def clicked(self): fname = self.getSelectedPath() if fname: self.open(fname) def open(self, fname): QDesktopServices.openUrl(QUrl('file:///' + fname)) def setup(self, wdir='.'): os.makedirs(wdir, exist_ok=True) self.model.setRootPath(wdir) self.setRootIndex(self.model.index(wdir))
class Explorer(QTreeView): def __init__(self, parent=None): QTreeView.__init__(self) self.header().setHidden(True) self.setAnimated(True) # Modelo self.model = QFileSystemModel(self) path = QDir.toNativeSeparators(QDir.homePath()) self.model.setRootPath(path) self.setModel(self.model) self.model.setNameFilters(["*.c", "*.h", "*.s"]) self.setRootIndex(QModelIndex(self.model.index(path))) self.model.setNameFilterDisables(False) # Se ocultan algunas columnas self.hideColumn(1) self.hideColumn(2) self.hideColumn(3) # Conexion self.doubleClicked.connect(self._open_file) Edis.load_lateral("explorer", self) def _open_file(self, i): if not self.model.isDir(i): indice = self.model.index(i.row(), 0, i.parent()) archivo = self.model.filePath(indice) principal = Edis.get_component("principal") principal.open_file(archivo)
class AttachmentView(QListView): """ A dockWidget displaying attachments of the current note. """ def __init__(self, parent=None): super(AttachmentView, self).__init__(parent) self.parent = parent self.settings = parent.settings self.model = QFileSystemModel() self.model.setFilter(QDir.Files) self.model.setRootPath(self.settings.attachmentPath) self.setModel(self.model) # self.setRootIndex(self.model.index(self.settings.attachmentPath)) self.setViewMode(QListView.IconMode) self.setUniformItemSizes(True) self.setResizeMode(QListView.Adjust) self.setItemDelegate(AttachmentItemDelegate(self)) self.clicked.connect(self.click) def contextMenuEvent(self, event): menu = QMenu() indice = self.selectedIndexes() if len(indice): menu.addAction(self.tr("Insert into note"), self.insert) menu.addAction(self.tr("Delete"), self.delete) else: pass menu.exec_(event.globalPos()) def mousePressEvent(self, event): """ Trigger click() when an item is pressed. """ self.clearSelection() QListView.mousePressEvent(self, event) def mouseReleaseEvent(self, event): """ Trigger click() when an item is pressed. """ self.clearSelection() QListView.mouseReleaseEvent(self, event) def insert(self): indice = self.selectedIndexes() for i in indice: filePath = self.model.filePath(i) filePath = filePath.replace(self.settings.notebookPath, "..") fileName = os.path.basename(filePath) text = "![%s](%s)" % (fileName, filePath) self.parent.notesEdit.insertPlainText(text) def delete(self): indice = self.selectedIndexes() for i in indice: filePath = self.model.filePath(i) QFile(filePath).remove() def click(self, index): self.setCurrentIndex(index)
class DataWidget(ui_datawidget.Ui_widget, WidgetBase): def __init__(self, parent=None): super(DataWidget, self).__init__(parent) self.setupUi(self) self.model = QFileSystemModel() self.settings = None allfilters = [] filters = re.findall( r"\((.*?)\)", QgsProviderRegistry.instance().fileVectorFilters())[1:] for filter in filters: allfilters = allfilters + filter.split(" ") filters += re.findall( r"\((.*?)\)", QgsProviderRegistry.instance().fileRasterFilters())[1:] for filter in filters: allfilters = allfilters + filter.split(" ") self.model.setNameFilters(allfilters) self.model.setNameFilterDisables(False) self.listDataList.setModel(self.model) self.btnAddData.pressed.connect(self.open_data_folder) for col in range(self.model.columnCount())[1:]: self.listDataList.hideColumn(col) self.service = None def open_data_folder(self): """ Open the data folder of the project using the OS """ path = os.path.join(self.data['data_root']) openfolder(path) def set_data(self, data): super(DataWidget, self).set_data(data) self.service = DataService(self.config) root = data['data_root'] if not os.path.exists(root): os.mkdir(root) self.model.setRootPath(root) self.listDataList.setRootIndex(self.model.index(root)) self.refresh() def write_config(self): self.logger.info("Data write config") DataService(self.config).update_date_to_latest() super(DataWidget, self).write_config() def refresh(self): self.lastSaveLabel.setText("Last save date: {}".format( self.service.last_save_date))
def load_tree(self, project): """Load the tree view on the right based on the project selected.""" qfsm = QFileSystemModel() qfsm.setRootPath(project['path']) load_index = qfsm.index(qfsm.rootPath()) # qfsm.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot) # qfsm.setNameFilterDisables(False) # pext = ["*{0}".format(x) for x in project['extensions']] # qfsm.setNameFilters(pext) self._tree.setModel(qfsm) self._tree.setRootIndex(load_index) t_header = self._tree.header()
class DockFileSystem(QDockWidget): left = Qt.LeftDockWidgetArea right = Qt.RightDockWidgetArea def __init__(self, parent = None): QDockWidget.__init__(self, "File System Tree View", parent) self.setObjectName("FileNavigatorDock") self.fsm = QFileSystemModel(self) tv = QTreeView(self) tv.showColumn(1) self.fsm.setRootPath(self.parent().workdir) tv.setModel(self.fsm) self.setAllowedAreas( self.left | self.right ) self.setGeometry(0,0,400,1000) pb = QPushButton("...",self) pb.clicked.connect(self.changeWorkdir) self.le = QLineEdit(self) self.le.setText(self.parent().workdir) dockbox = QWidget(self) hl = QHBoxLayout(dockbox) hl.addWidget(self.le) hl.addWidget(pb) hll=QWidget(self) hll.setLayout(hl) vl = QVBoxLayout(dockbox) dockbox.setLayout(vl) vl.addWidget(hll) vl.addWidget(tv) self.setWidget(dockbox) self.adjustSize() self.parent().say("Vista del sistema de ficheros creada") @pyqtSlot() def changeWorkdir(self): dialog=QFileDialog(self,"Elige directorio de trabajo",self.parent().workdir) dialog.setFileMode(QFileDialog.Directory) dialog.setAcceptMode(QFileDialog.AcceptOpen) if dialog.exec_(): fichero = dialog.selectedFiles().first().toLocal8Bit().data() self.parent().workdir = fichero self.le.setText(fichero) self.fsm.setRootPath(self.parent().workdir)
class FSLineEdit(QLineEdit): """ A line edit with auto completion for file system folders. """ def __init__(self, parent=None): QLineEdit.__init__(self, parent) self.fsmodel = QFileSystemModel() self.fsmodel.setRootPath("") self.completer = QCompleter() self.completer.setModel(self.fsmodel) self.setCompleter(self.completer) self.fsmodel.setFilter(QDir.Drives | QDir.AllDirs | QDir.Hidden | QDir.NoDotAndDotDot) def setPath(self, path): self.setText(path) self.fsmodel.setRootPath(path)
def paintEvent(self, event): self.splitter = QSplitter() model = QFileSystemModel() model.setRootPath(QDir.rootPath()) # model.setRootPath(idahome) # using ida home instead views = [] for ViewType in (QColumnView, QTreeView): view = ViewType(self.splitter) view.setModel(model) view.setRootIndex(model.index(idahome)) view.setDragEnabled(True) view.setAcceptDrops(True) view.setDragDropMode(QtGui.QAbstractItemView.InternalMove) # splitter.show() # Create layout layout = QtGui.QVBoxLayout(self) # layout.addWidget(self.comboList) layout.addWidget(self.splitter)
def open_project(self, project): project_path = project.path qfsm = None # Should end up having a QFileSystemModel if project_path not in self.__projects: qfsm = QFileSystemModel() project.model = qfsm qfsm.setRootPath(project_path) qfsm.setFilter(QDir.AllDirs | QDir.Files | QDir.NoDotAndDotDot) # If set to true items that dont match are displayed disabled qfsm.setNameFilterDisables(False) pext = ["*{0}".format(x) for x in project.extensions] logger.debug(pext) qfsm.setNameFilters(pext) self.__projects[project_path] = project self.__check_files_for(project_path) self.emit(SIGNAL("projectOpened(PyQt_PyObject)"), project) else: qfsm = self.__projects[project_path] return qfsm
def __init__(self): QWidget.__init__(self) hbox = QHBoxLayout(self) hbox.setContentsMargins(0, 0, 0, 0) self.btnClose = QPushButton(self.style().standardIcon(QStyle.SP_DialogCloseButton), "") self.completer = QCompleter(self) self.pathLine = ui_tools.LineEditTabCompleter(self.completer) fileModel = QFileSystemModel(self.completer) fileModel.setRootPath("") self.completer.setModel(fileModel) self.pathLine.setCompleter(self.completer) self.btnOpen = QPushButton(self.style().standardIcon(QStyle.SP_ArrowRight), "Open!") hbox.addWidget(self.btnClose) hbox.addWidget(QLabel(self.tr("Path:"))) hbox.addWidget(self.pathLine) hbox.addWidget(self.btnOpen) self.connect(self.pathLine, SIGNAL("returnPressed()"), self._open_file) self.connect(self.btnOpen, SIGNAL("clicked()"), self._open_file)
def load_tree(self, project): """Load the tree view on the right based on the project selected.""" qfsm = QFileSystemModel() #FIXME it's not loading the proper folder, just the root / qfsm.setRootPath(project.path) qfsm.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot) qfsm.setNameFilterDisables(False) pext = ["*{0}".format(x) for x in project.extensions] qfsm.setNameFilters(pext) self._tree.setModel(qfsm) t_header = self._tree.header() t_header.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) t_header.setResizeMode(0, QHeaderView.Stretch) t_header.setStretchLastSection(False) t_header.setClickable(True) self._tree.hideColumn(1) # Size self._tree.hideColumn(2) # Type self._tree.hideColumn(3) # Modification date
def __init__(self): QWidget.__init__(self) hbox = QHBoxLayout(self) hbox.setContentsMargins(0, 0, 0, 0) self.btnClose = QPushButton( self.style().standardIcon(QStyle.SP_DialogCloseButton), '') self.completer = QCompleter(self) self.pathLine = ui_tools.LineEditTabCompleter(self.completer) fileModel = QFileSystemModel(self.completer) fileModel.setRootPath("") self.completer.setModel(fileModel) self.pathLine.setCompleter(self.completer) self.btnOpen = QPushButton( self.style().standardIcon(QStyle.SP_ArrowRight), 'Open!') hbox.addWidget(self.btnClose) hbox.addWidget(QLabel(self.trUtf8("Path:"))) hbox.addWidget(self.pathLine) hbox.addWidget(self.btnOpen) self.connect(self.pathLine, SIGNAL("returnPressed()"), self._open_file) self.connect(self.btnOpen, SIGNAL("clicked()"), self._open_file)
def load_tree(self, project): """Load the tree view on the right based on the project selected.""" qfsm = QFileSystemModel() qfsm.setRootPath(project.path) load_index = qfsm.index(qfsm.rootPath()) qfsm.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot) qfsm.setNameFilterDisables(False) pext = ["*{0}".format(x) for x in project.extensions] qfsm.setNameFilters(pext) self._tree.setModel(qfsm) self._tree.setRootIndex(load_index) t_header = self._tree.header() t_header.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) t_header.setResizeMode(0, QHeaderView.Stretch) t_header.setStretchLastSection(False) t_header.setClickable(True) self._tree.hideColumn(1) # Size self._tree.hideColumn(2) # Type self._tree.hideColumn(3) # Modification date
def __init__(self, root, parent=None): super(MFileTree, self).__init__(parent) self.setStyleSheet("color:rgb(189, 195, 199);") # model = QFileSystemModel() # model.setRootPath(QDir.rootPath()) # view = QTreeView(parent) # self.show() #app = QApplication(sys.argv) # Splitter to show 2 views in same widget easily. splitter = QSplitter() # The model. model = QFileSystemModel() # You can setRootPath to any path. model.setRootPath(root) # List of views. self.views = [] #self.view = QTreeView(self) # self.itemPressed.connect(self.itemClicked) self.setModel(model) self.setRootIndex(model.index(root)) self.header().setStyleSheet("background:rgb(70, 80, 88);") # for ViewType in (QColumnView, QTreeView): # # Create the view in the splitter. # view = ViewType(splitter) # # Set the model of the view. # view.setModel(model) # # Set the root index of the view as the user's home directory. # view.setRootIndex(model.index(QDir.homePath())) # # Show the splitter. # splitter.show() self.layout = QtGui.QHBoxLayout() # self.layout.addWidget(self) self.setLayout(self.layout) # Maximize the splitter. splitter.setWindowState(Qt.WindowMaximized)
def __init__(self, *args): super(FileBrowser, self).__init__(*args) layout = QVBoxLayout() model = QFileSystemModel() filters = ["*.jpg", "*.JPG", "*.jpeg", "*.JPEG", "*.png", "*.PNG"] model.setNameFilters(filters) self.directoryTree = QTreeView() self.directoryTree.setModel(model) self.directoryTree.currentChanged = self.currentChanged self.directoryTree.setSortingEnabled(True) self.directoryTree.sortByColumn(0, Qt.AscendingOrder) self.fileList = QListWidget() layout.addWidget(self.directoryTree) self.setLayout(layout) root = model.setRootPath(QDir.homePath()) self.directoryTree.setRootIndex(root)
def __init__(self, *args): super(FileBrowser, self).__init__(*args) layout = QVBoxLayout() model = QFileSystemModel() filters = ["*.jpg", "*.JPG", "*.jpeg", "*.JPEG","*.png","*.PNG"] model.setNameFilters(filters) self.directoryTree = QTreeView() self.directoryTree.setModel(model) self.directoryTree.currentChanged = self.currentChanged self.directoryTree.setSortingEnabled(True) self.directoryTree.sortByColumn(0, Qt.AscendingOrder) self.fileList = QListWidget() layout.addWidget(self.directoryTree) self.setLayout(layout) root = model.setRootPath(QDir.homePath()) self.directoryTree.setRootIndex(root)
class ExampleApp(QtGui.QMainWindow, main_form.Ui_MainWindow): def __init__(self): super(self.__class__, self).__init__() self.setupUi( self) # This is defined in design.py file automatically # self.listWidget_Xoutput_files.addItem("deneme") cleaner_files_path = os.path.join(str(QDir.currentPath()), "cleaner_files") if not os.path.exists(cleaner_files_path): os.mkdir(cleaner_files_path) self.model = QFileSystemModel() self.model.setRootPath(cleaner_files_path) self.model.setNameFilters(QStringList(["Xoutput-n_analyses-*.txt" ])) self.model.setNameFilterDisables(False) self.model.setFilter(QDir.Dirs | QDir.Files) self.treeView_Xoutput_files.setModel(self.model) self.treeView_Xoutput_files.setRootIndex( self.model.index(cleaner_files_path)) self.treeView_Xoutput_files.setColumnWidth(0, 500) self.treeView_Xoutput_files.selectionModel( ).selectionChanged.connect(self.load_and_view_file_contents) self.rules_dict = {} self.special_button_for_level_01.setDisabled(True) def load_and_view_file_contents(self, current, previous): print current.indexes() model_index = current.indexes()[0] filename = self.model.data(model_index).toString() import re m = re.match(r"Xoutput-n_analyses-([0-9]+)", filename) if m: n_analyzes = int(m.group(1)) else: n_analyzes = -1 if n_analyzes == 1: self.special_button_for_level_01.setDisabled(False) self.special_button_for_level_01.clicked.connect( self.add_all_level_01_to_rule_dict) else: self.special_button_for_level_01.setDisabled(True) with codecs.open(filename, "r", encoding="utf8") as f: lines = f.readlines() # print lines self.listWidget_selected_file_contents.clear() self.listWidget_selected_file_contents.addItems( QStringList(lines)) self.listWidget_selected_file_contents.selectionModel( ).selectionChanged.connect( self.load_and_view_samples_from_train_and_dev) self.load_and_view_rule_file_contents(n_analyzes) def load_and_view_rule_file_contents(self, n_analyzes): # load rules file self.rules_dict = {} rules_filename = "Xoutput-n_analyses-%02d.txt.rules" % n_analyzes try: with codecs.open(rules_filename, "r") as rules_f: self.output_file_load_status.setText("%s loaded." % rules_filename) self.output_file_load_status.setStyleSheet( "QLabel { color : green; }") rules = [] line = rules_f.readline().strip() while line: rules.append(line.split(" ")) self.rules_dict[int( line.split(" ")[0])] = line.split(" ") line = rules_f.readline().strip() self.update_tableWidgetxxxx( self.tableWidget_output_file_contents, sorted(self.rules_dict.items(), key=lambda x: x[0]), len(self.rules_dict.keys()), 1 + 1 + n_analyzes + 1) # id + golden + FST analyzes + selected except IOError as e: # print "File not found" self.output_file_load_status.setText("File not found") self.output_file_load_status.setStyleSheet( "QLabel { color : red; }") self.update_tableWidgetxxxx( self.tableWidget_output_file_contents, [], 0, 1) # id + golden + FST analyzes + selected def update_tableWidgetxxxx(self, table_widget, rules, row_count, col_count): table_widget.clear() table_widget.setColumnCount(col_count) table_widget.setRowCount(row_count) if rules: for row in range(table_widget.rowCount()): row_items = rules[row] print row_items item = self.listWidget_selected_file_contents.item( int(row_items[0]) - 1) # type: QListWidgetItem item.setBackgroundColor(QtGui.QColor(255, 0, 0, 127)) for column in range(table_widget.columnCount()): if column < len(row_items[1]): table_widget.setItem( row, column, QTableWidgetItem( row_items[1][column].decode("utf8"))) # self.tableWidget_samples_from_train_and_dev.resizeColumnToContents() for column in range(table_widget.columnCount()): table_widget.resizeColumnToContents(column) def update_corrected_morph_analysis(self, current, previous): model_index = current.indexes()[0] self.textEdit_2.setPlainText( self.listWidget_selected_row.model().data( model_index).toString()) def add_all_level_01_to_rule_dict(self): self.rules_dict = {} for idx in range(self.listWidget_selected_file_contents.count()): row_items = unicode( self.listWidget_selected_file_contents.item( idx).text()).strip().split(" ") rules_item = [ x.encode("utf8") for x in [row_items[0], row_items[4], row_items[-1], row_items[-1]] ] self.rules_dict[int(row_items[0])] = rules_item self.update_tableWidgetxxxx( self.tableWidget_output_file_contents, sorted(self.rules_dict.items(), key=lambda x: x[0]), len(self.rules_dict.keys()), 1 + 1 + 1 + 1) # id + golden + FST analyzes + selected def add_to_the_rule_dict(self, state): n_analyzes, entry_id = [ int(x) for x in self.label_8.text().split(" ") ] other_analyzes = [ self.listWidget_selected_row.item(i) for i in range(self.listWidget_selected_row.count()) ] # type: list[QListWidgetItem] rules_item = [unicode(x).encode("utf8") for x in [entry_id, self.textEdit_golden_morph_analysis.toPlainText()] + \ [x.text() for x in other_analyzes] + \ [self.textEdit_2.toPlainText()]] self.rules_dict[entry_id] = rules_item self.update_tableWidgetxxxx( self.tableWidget_output_file_contents, sorted(self.rules_dict.items(), key=lambda x: x[0]), len(self.rules_dict.keys()), 1 + 1 + n_analyzes + 1) # id + golden + FST analyzes + selected def load_and_view_samples_from_train_and_dev(self, current, previous): print current.indexes() model_index = current.indexes()[0] morph_analyzes = unicode( self.listWidget_selected_file_contents.model().data( model_index).toString()).strip().split(" ") # print morph_analyzes golden_morph_analysis = morph_analyzes[4] target = golden_morph_analysis[1:] other_morph_analyzes = morph_analyzes[5:] n_analyzes = len(other_morph_analyzes) self.label_3.setText("selected row id: %d" % int(morph_analyzes[0])) self.label_8.setText("%d %d" % (int(n_analyzes), int(morph_analyzes[0]))) self.listWidget_selected_row.clear() self.listWidget_selected_row.addItems( QStringList(other_morph_analyzes)) self.textEdit_golden_morph_analysis.setPlainText( golden_morph_analysis) # self.addRuleToTheListButton.clicked.connect( # partial(self.save_to_file, n_analyzes=n_analyzes, entry_id=int(morph_analyzes[0]))) # from functools import partial self.addRuleToTheListButton.clicked.connect( self.add_to_the_rule_dict) if len(other_morph_analyzes) == 1: self.textEdit_2.setPlainText(other_morph_analyzes[0]) self.listWidget_selected_row.selectionModel( ).selectionChanged.connect(self.update_corrected_morph_analysis) print type(target) print target print target.encode("utf8") # target = target.replace("?", "\?") lines = subprocess.check_output( ("grep -F -m 50 %s ./dataset/errors.gungor.ner.train_and_dev" % target).split(" "), shell=False) # print lines lines = [x.decode("utf8") for x in lines.split("\n")] print type(lines[0]) print len(lines) self.tableWidget_samples_from_train_and_dev.clear() self.tableWidget_samples_from_train_and_dev.setColumnCount( n_analyzes + 1) self.tableWidget_samples_from_train_and_dev.setRowCount( len(lines) - 1) for row in range( self.tableWidget_samples_from_train_and_dev.rowCount()): row_items = lines[row].split(" ")[2:] for column in range( self.tableWidget_samples_from_train_and_dev. columnCount()): if column < len(row_items): self.tableWidget_samples_from_train_and_dev.setItem( row, column, QTableWidgetItem(row_items[column])) # self.tableWidget_samples_from_train_and_dev.resizeColumnToContents() for column in range( self.tableWidget_samples_from_train_and_dev.columnCount()): self.tableWidget_samples_from_train_and_dev.resizeColumnToContents( column) self.sort_and_save_button.clicked.connect(self.sort_and_save) def sort_and_save(self): indexes = self.treeView_Xoutput_files.selectedIndexes() model_index = indexes[0] filename = self.model.data(model_index).toString() with open(filename + ".rules", "w") as f: for row in range( self.tableWidget_output_file_contents.rowCount()): row_content = [] for column in range(self.tableWidget_output_file_contents. columnCount()): cell_content = self.tableWidget_output_file_contents.item( row, column).text() # type: QString if cell_content: row_content.append( unicode(cell_content).encode("utf8")) if row != 0: f.write("\n") f.write(" ".join(row_content))
http://doc.qt.nokia.com/latest/model-view-programming.html. """ import sys from PyQt4.QtGui import (QApplication, QColumnView, QFileSystemModel, QSplitter, QTreeView) from PyQt4.QtCore import QDir, Qt if __name__ == '__main__': app = QApplication(sys.argv) # Splitter to show 2 views in same widget easily. splitter = QSplitter() # The model. model = QFileSystemModel() # You can setRootPath to any path. model.setRootPath(QDir.rootPath()) # List of views. views = [] for ViewType in (QColumnView, QTreeView): # Create the view in the splitter. view = ViewType(splitter) # Set the model of the view. view.setModel(model) # Set the root index of the view as the user's home directory. view.setRootIndex(model.index(QDir.homePath())) # Show the splitter. splitter.show() # Maximize the splitter. splitter.setWindowState(Qt.WindowMaximized) # Start the main loop. sys.exit(app.exec_())
class SourceFileTreeWidget(QWidget): """ Config window""" def __init__(self, parent): super(SourceFileTreeWidget, self).__init__(parent) self.ui = Ui_SourceFileTreeWidget() self.ui.setupUi(self) self.file_model = QFileSystemModel() #self.file_model.setFilter(QDir.AllEntries | QDir.NoDot) self.set_filter() self.ui.tree.setModel(self.file_model) self.ui.tree.resizeColumnToContents(0) self.ui.custom_root.setText(QDir.currentPath()) self.set_root() header = self.ui.tree.header() header.setResizeMode(QHeaderView.ResizeToContents) #header.setStretchLastSection(True) #header.setSortIndicator(0, Qt.AscendingOrder) #header.setSortIndicatorShown(True) #header.setClickable(True) self.connect(self.ui.tree, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self.open_file) self.connect(self.ui.ok_filter, QtCore.SIGNAL('clicked()'), self.set_filter) self.connect(self.ui.custom_filter, QtCore.SIGNAL('returnPressed()'), self.set_filter) self.connect(self.ui.ok_root, QtCore.SIGNAL('clicked()'), self.set_root) self.connect(self.ui.custom_root, QtCore.SIGNAL('returnPressed()'), self.set_root) self.open_file_signal = None def set_open_file_signal(self, signal): """ callback to signal file opening """ self.open_file_signal = signal def set_root(self, root=None, use_common_prefix=True): """ set the root path of the widget """ curr = str(self.ui.custom_root.text()) if not root: use_common_prefix = False # input text box will override it. root = self.ui.custom_root.text() else: self.ui.custom_root.setText(root) idx = self.file_model.index(root) self.ui.tree.setExpanded(idx, True) if use_common_prefix and curr == os.path.commonprefix([root, curr]): return idx = self.file_model.setRootPath(root) if not idx.isValid(): logging.warn('Invalid path') return self.ui.tree.setRootIndex(idx) self.ui.tree.setExpanded(idx, True) def set_filter(self): """ set filter by extension """ filters = str(self.ui.custom_filter.text()).split(';') self.file_model.setNameFilters(filters) self.file_model.setNameFilterDisables(False) def open_file(self, idx): """ emit file opening signal """ if self.file_model.isDir(idx): return fullpath = self.file_model.filePath(idx) if self.open_file_signal: self.open_file_signal.emit(str(fullpath), 0) def set_file_selected(self, tab_idx): """ slot to associate the file in active tab """ filename = self.sender().tabToolTip(tab_idx) idx = self.file_model.index(filename) if idx.isValid(): self.ui.tree.selectionModel().select(idx, QItemSelectionModel.ClearAndSelect)
class DecryptDialog(QDialog): def __init__(self): self.techniquesClass = { 'caesar cipher': caesarCipher, 'mono alphabetic cipher': monoAlphabeticCipher, 'vigenere cipher': vigenereCipher, 'vernan cipher': vernanCipher, 'one time pad': oneTimePad } self.rowsview = [] self.filesview = [] #self.techniques = [] QDialog.__init__(self) self.setWindowTitle("Desencriptador de Cryogenesis Systems.") self.resize(1024, 600) self.setMinimumSize(QSize(1024, 600)) self.setMaximumSize(QSize(1024, 600)) self.checkBox_2 = QCheckBox(self) self.checkBox_2.setGeometry(QRect(620, 10, 130, 20)) self.checkBox_2.setText('seleccionar todos') self.checkBox_2.clicked.connect(self.__selectAllFiles) self.treeView = QTreeView(self) self.treeView.setGeometry(QRect(10, 10, 230, 580)) self.treeView.setObjectName("treeView") self.fileSystemModel = QFileSystemModel(self.treeView) self.fileSystemModel.setReadOnly(False) self.fileSystemModel.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot) root = self.fileSystemModel.setRootPath("/") self.treeView.setModel(self.fileSystemModel) self.treeView.setRootIndex(root) self.treeView.hideColumn(1) self.treeView.hideColumn(2) self.treeView.hideColumn(3) self.treeView.clicked.connect(self.__eventDirectoryChanged) self.mygroupbox = QGroupBox(self) self.mygroupbox.setGeometry(QRect(0, 0, 1000, 1000)) self.myform = QFormLayout() for j in list(range(100)): horizontalLayout = QHBoxLayout() self.myform.addRow(horizontalLayout) self.rowsview.append(horizontalLayout) self.mygroupbox.setLayout(self.myform) scroll = QScrollArea(self) scroll.setWidget(self.mygroupbox) scroll.setWidgetResizable(True) scroll.setGeometry(QRect(250, 30, 500, 580)) scroll.setWidgetResizable(True) self.label_4 = QLabel(self) self.label_4.setGeometry(QRect(780, 30, 31, 16)) self.label_4.setPixmap(QPixmap("images/key.png")) self.label_4.setScaledContents(True) self.lineEdit = QLineEdit(self) self.lineEdit.setGeometry(QRect(820, 30, 180, 20)) self.lineEdit.setObjectName("lineEdit") self.lineEdit.setPlaceholderText(_fromUtf8('escriba su contraseña')) self.lineEdit.setEchoMode(QLineEdit.Password) self.okButton = QPushButton(self) self.okButton.setGeometry(QRect(920, 560, 80, 20)) self.okButton.setText('Iniciar...') self.connect(self.okButton, SIGNAL("clicked()"), self.__eventInitDecryption) def __eventDirectoryChanged(self): index = self.treeView.currentIndex() self.__changeDirectory(self.fileSystemModel.filePath(index)) def __changeDirectory(self, path): for c in self.filesview: c.setParent(None) c.deleteLater() self.filesview = [] self.checkBox_2.setChecked(False) self.progressBars = {} for f in self.__getFiles(path): try: group = QGroupBox(f, self) group.setGeometry(QRect(20, 20, 100, 150)) group.setCheckable(True) group.setChecked(False) group.setFixedSize(100, 150) group.setFlat(True) group.setToolTip(f) label = QLabel(group) label.setScaledContents(True) label.setGeometry(QRect(5, 25, 90, 90)) label.setToolTip(f) progressBar = QProgressBar(group) progressBar.setGeometry(QRect(0, 70, 111, 10)) progressBar.setProperty("value", 0) progressBar.setTextVisible(False) progressBar.setToolTip('0%') progressBar.setVisible(False) self.progressBars[f] = progressBar self.filesview.append(group) from os.path import isfile if isfile(path + '/' + f): ext = f.split('.')[-1] if isfile('icons/' + ext.lower() + '.png'): label.setPixmap( QPixmap('icons/' + ext.lower() + '.png')) else: label.setPixmap(QPixmap('icons/default.png')) else: label.setPixmap(QPixmap('icons/folder.png')) self.connect(group, SIGNAL("clicked()"), self.__deselectFile) except ValueError: pass i = 0 for x in list(range(len(self.filesview))): if (x % 4) == 0: i = i + 1 self.rowsview[i].addWidget(self.filesview[x]) def __selectAllFiles(self): for o in self.filesview: o.setChecked(self.checkBox_2.isChecked()) def __deselectFile(self): #print 'deselect' self.checkBox_2.setChecked(False) def __arrozconpollo(self): self.__obtainSelectedFIles() def __obtainSelectedFIles(self): files = [] for o in self.filesview: if o.isChecked(): files.append(str(o.title())) self.progressBars[str(o.title())].setVisible(True) return files def __getFiles(self, path): from os import listdir from os.path import isfile f = [] for base in listdir(path): try: if isfile(path + '/' + base) and base.split('.')[-1] == 'cry': f.append(base) except ValueError: pass f.sort() return f def __eventInitDecryption(self): if len(self.__obtainSelectedFIles()) == 0: msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText( "Debes especificar los archivos que quieres desencriptar") msg.setWindowTitle("Cryosystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() return if str(self.lineEdit.text()).strip() == '': msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("Debes especificar una clave") msg.setWindowTitle("Cryosystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() return self.okButton.setEnabled(False) self.lineEdit.setEnabled(False) index = self.treeView.currentIndex() path = self.fileSystemModel.filePath(index) selectedFiles = self.__obtainSelectedFIles() from hashlib import md5 Hash = md5() Hash.update(str(self.lineEdit.text())) key = Hash.hexdigest() errors = 0 from os.path import getsize blockSize = 4096 for f in selectedFiles: f_in = open(path + '/' + f, 'rb') print path + '/' + f header = '' if (f_in.read(20) == ('CRYOGENESIS' + unhexlify('00') + 'ARCHIVE' + unhexlify('01'))): while (True): c = f_in.read(1) if c == unhexlify('02'): break else: header = header + c else: print 'esto no es un archivo cifradodo de Cryogenesis Systems' #print key aes = AES(key) #print aes.decrypt(header) header_sections = aes.decrypt(header).split('|') if header_sections[0] != 'header': msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("La clave no es correcta para el archivo:" + f) msg.setWindowTitle("Cryosystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() errors = errors + 1 continue f_out = open(path + '/' + header_sections[1], 'wb') techniques = header_sections[2].split(':')[:-1] techniquesObjects = [] for t in techniques: techniquesObjects.append(self.techniquesClass[t](key)) techniquesObjects.reverse() in_size = getsize(path + '/' + f) in_progress = 0.0 block = f_in.read(blockSize) while (block): block_p = block for t in techniquesObjects: block_p = t.decrypt(block_p) f_out.write(block_p) in_progress = in_progress + blockSize progress = (in_progress / in_size) * 100 self.progressBars[str(f)].setProperty("value", int(progress)) self.progressBars[str(f)].setToolTip(str(progress) + '%') block = f_in.read(blockSize) f_in.close() f_out.close() if (checksum(path + '/' + header_sections[1]) != header_sections[3]): msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("El archivo" + f + 'se ha corrompido') msg.setWindowTitle("Cryosystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() errors = errors + 1 from os import remove remove(header_sections[1]) msg = QMessageBox() msg.setWindowTitle("Cryosystems") msg.setStandardButtons(QMessageBox.Ok) if (errors == 0): msg.setIcon(QMessageBox.Information) msg.setText("La desencriptacion ha concluido exitosamente") else: msg.setIcon(QMessageBox.Warning) msg.setText("La desencriptacion ha concluido con " + str(errors) + ' error(es)') msg.exec_() self.hide()
def buttonClicked(self): sender = self.sender() self.statusBar().showMessage(sender.text() + " was pressed") if __name__ == "__main__": app = QApplication(sys.argv) # Splitter to show 2 views in same widget easily. splitter = QSplitter() # The model. model = QFileSystemModel() # You can setRootPath to any path. model.setReadOnly(True) # model.setRootPath("/Users/legal/Developpement/pc-sim/src/reports") model.setRootPath(QDir.currentPath()) model.setNameFilters(["*.perf", "*.dat", "*.txt", "*.data"]) model.setNameFilterDisables(False) # setDir.setNameFilters(filter) # tree.setRootIndex(model.index(QtCore.QDir.path(setDir), 0 )) # List of views. views = [] # for ViewType in (QColumnView, QTreeView): # for ViewType in (QTreeView): # Create the view in the splitter. view = TreeView(splitter) view.setSelectionMode(QAbstractItemView.ExtendedSelection)
class DirectoryWidget(RWidget): def __init__(self, parent, base="."): RWidget.__init__(self, parent) self.base = base self.model = QFileSystemModel() self.model.setRootPath(QDir.rootPath()) self.proxyModel = FileSystemProxyModel() self.proxyModel.setDynamicSortFilter(True) self.proxyModel.setFilterKeyColumn(0) self.proxyModel.setSourceModel(self.model) self.listView = QListView(self) self.listView.setModel(self.proxyModel) index = self.model.index(QDir.currentPath()) self.listView.setRootIndex(self.proxyModel.mapFromSource(index)) self.listView.setContextMenuPolicy(Qt.CustomContextMenu) self.lineEdit = QLineEdit(self) filterLineEdit = QLineEdit() filterLabel = QLabel("Filter:") self.connect(filterLineEdit, SIGNAL("textChanged(QString)"), self.proxyModel.setFilterWildcard) self.actions = [] self.upAction = QAction("&Up", self) self.upAction.setStatusTip("Move to parent directory") self.upAction.setToolTip("Move to parent directory") self.upAction.setIcon(QIcon(":go-up")) self.upAction.setEnabled(True) self.actions.append(self.upAction) self.newAction = QAction("&New Directory", self) self.newAction.setStatusTip("Create new directory") self.newAction.setToolTip("Create new directory") self.newAction.setIcon(QIcon(":folder-new")) self.newAction.setEnabled(True) self.actions.append(self.newAction) self.synchAction = QAction("&Synch", self) self.synchAction.setStatusTip("Synch with current working directory") self.synchAction.setToolTip("Synch with current working directory") self.synchAction.setIcon(QIcon(":view-refresh")) self.synchAction.setEnabled(True) self.actions.append(self.synchAction) self.rmAction = QAction("&Delete", self) self.rmAction.setStatusTip("Delete selected item") self.rmAction.setToolTip("delete selected item") self.rmAction.setIcon(QIcon(":edit-delete")) self.rmAction.setEnabled(True) self.actions.append(self.rmAction) self.openAction = QAction("&Open", self) self.openAction.setStatusTip("Open selected R script") self.openAction.setToolTip("Open selected R script") self.openAction.setIcon(QIcon(":document-open")) self.openAction.setEnabled(True) self.actions.append(self.openAction) self.loadAction = QAction("&Load", self) self.loadAction.setStatusTip("Load selected R data") self.loadAction.setToolTip("Load selected R data") self.loadAction.setIcon(QIcon(":document-open")) self.loadAction.setEnabled(True) self.actions.append(self.loadAction) self.setAction = QAction("Set as ¤t", self) self.setAction.setStatusTip("Set folder as R working directory") self.setAction.setToolTip("Set folder as R working directory") self.setAction.setIcon(QIcon(":folder-home")) self.setAction.setEnabled(True) self.actions.append(self.setAction) self.loadExternal = QAction("Open &Externally", self) self.loadExternal.setStatusTip("Load file in external application") self.loadExternal.setToolTip("Load file in external application") self.loadExternal.setIcon(QIcon(":folder-system")) self.loadExternal.setEnabled(True) self.actions.append(self.loadExternal) self.rootChanged() hiddenAction = QAction("Toggle hidden files", self) hiddenAction.setStatusTip("Show/hide hidden files and folders") hiddenAction.setToolTip("Show/hide hidden files and folders") hiddenAction.setIcon(QIcon(":stock_keyring")) hiddenAction.setCheckable(True) self.connect(self.newAction, SIGNAL("triggered()"), self.newFolder) self.connect(self.upAction, SIGNAL("triggered()"), self.upFolder) self.connect(self.synchAction, SIGNAL("triggered()"), self.synchFolder) self.connect(self.rmAction, SIGNAL("triggered()"), self.rmItem) self.connect(self.openAction, SIGNAL("triggered()"), self.openItem) self.connect(self.loadAction, SIGNAL("triggered()"), self.loadItem) self.connect(self.loadExternal, SIGNAL("triggered()"), self.externalItem) self.connect(self.setAction, SIGNAL("triggered()"), self.setFolder) self.connect(hiddenAction, SIGNAL("toggled(bool)"), self.toggleHidden) self.connect(self.listView, SIGNAL("activated(QModelIndex)"), self.cdFolder) self.connect(self.listView, SIGNAL("customContextMenuRequested(QPoint)"), self.customContext) self.connect(self.lineEdit, SIGNAL("returnPressed()"), self.gotoFolder) upButton = QToolButton() upButton.setDefaultAction(self.upAction) upButton.setAutoRaise(True) newButton = QToolButton() newButton.setDefaultAction(self.newAction) newButton.setAutoRaise(True) synchButton = QToolButton() synchButton.setDefaultAction(self.synchAction) synchButton.setAutoRaise(True) setButton = QToolButton() setButton.setDefaultAction(self.setAction) setButton.setAutoRaise(True) hiddenButton = QToolButton() hiddenButton.setDefaultAction(hiddenAction) hiddenButton.setAutoRaise(True) hbox = QHBoxLayout() hbox.addWidget(upButton) hbox.addWidget(synchButton) hbox.addWidget(newButton) hbox.addWidget(setButton) hbox.addWidget(hiddenButton) vbox = QVBoxLayout(self) vbox.addLayout(hbox) vbox.addWidget(self.lineEdit) vbox.addWidget(self.listView) vbox.addWidget(filterLabel) vbox.addWidget(filterLineEdit) def toggleHidden(self, toggled): base = QDir.AllDirs|QDir.AllEntries|QDir.NoDotAndDotDot if toggled: self.model.setFilter(base|QDir.Hidden) else: self.model.setFilter(base) def gotoFolder(self): text = self.lineEdit.text() self.listView.setRootIndex(self.proxyModel.mapFromSource(self.model.index(text, 0))) def rootChanged(self): index1 = self.listView.rootIndex() index2 = self.proxyModel.mapToSource(index1) self.lineEdit.setText(self.model.filePath(index2)) self.listView.setCurrentIndex(index1) def customContext(self, pos): index = self.listView.indexAt(pos) index = self.proxyModel.mapToSource(index) if not index.isValid(): self.rmAction.setEnabled(False) self.openAction.setEnabled(False) self.loadAction.setEnabled(False) elif not self.model.isDir(index): info = self.model.fileInfo(index) suffix = info.suffix() if suffix in ("Rd","Rdata","RData"): self.loadAction.setEnabled(True) self.openAction.setEnabled(False) self.loadExternal.setEnabled(False) elif suffix in ("txt","csv","R","r"): self.openAction.setEnabled(True) self.loadAction.setEnabled(False) self.loadExternal.setEnabled(True) else: self.loadAction.setEnabled(False) self.openAction.setEnabled(False) self.loadExternal.setEnabled(True) menu = QMenu(self) for action in self.actions: menu.addAction(action) menu.exec_(self.listView.mapToGlobal(pos)) def openItem(self): index = self.listView.currentIndex() index = self.proxyModel.mapToSource(index) self.emit(SIGNAL("openFileRequest(QString)"), self.model.filePath(index)) def loadItem(self): index = self.listView.currentIndex() index = self.proxyModel.mapToSource(index) self.emit(SIGNAL("loadFileRequest(QString)"), self.model.filePath(index)) def externalItem(self): index = self.listView.currentIndex() index = self.proxyModel.mapToSource(index) QDesktopServices.openUrl(QUrl(self.model.filePath(index))) def newFolder(self): text, ok = QInputDialog.getText(self, "New Folder", "Folder name:", QLineEdit.Normal, "new_folder") if ok: index = self.listView.rootIndex() index = self.proxyModel.mapToSource(index) self.model.mkdir(index, text) def setFolder(self): index = self.listView.currentIndex() index = self.proxyModel.mapToSource(index) commands = "setwd('%s')" % self.model.filePath(index) self.emitCommands(commands) def rmItem(self): index = self.listView.currentIndex() if index == self.listView.rootIndex(): return yes = QMessageBox.question(self, "manageR Warning", "Are you sure you want to delete '%s'?" % self.model.fileName(index), QMessageBox.Yes|QMessageBox.Cancel) if not yes == QMessageBox.Yes: return index = self.proxyModel.mapToSource(index) if self.model.isDir(index): result = self.model.rmdir(index) else: result = self.model.remove(index) if not result: QMessageBox.warning(self, "manageR Error", "Unable to delete %s!" % self.model.fileName(index)) def upFolder(self): index = self.listView.rootIndex() index = self.proxyModel.parent(index) self.listView.setRootIndex(index) self.rootChanged() def cdFolder(self): indexes = self.listView.selectedIndexes() if len(indexes) < 1: return index = indexes[0] if self.model.isDir(self.proxyModel.mapToSource(index)): self.listView.setRootIndex(index) self.rootChanged() self.listView.clearSelection() def synchFolder(self): text = robjects.r.getwd()[0] index = self.model.index(text, 0) index = self.proxyModel.mapFromSource(index) self.listView.setRootIndex(index) self.rootChanged()
class EncryptDialog(QDialog): def __init__(self): self.techniquesClass = { 'caesar cipher': caesarCipher, 'mono alphabetic cipher': monoAlphabeticCipher, 'vigenere cipher': vigenereCipher, 'vernan cipher': vernanCipher, 'one time pad': oneTimePad } self.rowsview = [] self.filesview = [] self.techniques = [] QDialog.__init__(self) self.setWindowTitle("CryptoSystems") self.resize(1024, 600) self.setMinimumSize(QSize(1024, 600)) self.setMaximumSize(QSize(1024, 600)) self.checkBox_2 = QCheckBox(self) self.checkBox_2.setGeometry(QRect(620, 10, 130, 20)) self.checkBox_2.setText('Select All') self.checkBox_2.clicked.connect(self.__selectAllFiles) self.treeView = QTreeView(self) self.treeView.setGeometry(QRect(10, 10, 230, 580)) self.treeView.setObjectName("treeView") self.fileSystemModel = QFileSystemModel(self.treeView) self.fileSystemModel.setReadOnly(False) self.fileSystemModel.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot) root = self.fileSystemModel.setRootPath("/") self.treeView.setModel(self.fileSystemModel) self.treeView.setRootIndex(root) self.treeView.hideColumn(1) self.treeView.hideColumn(2) self.treeView.hideColumn(3) self.treeView.clicked.connect(self.__eventDirectoryChanged) self.mygroupbox = QGroupBox(self) self.mygroupbox.setGeometry(QRect(0, 0, 1000, 1000)) self.myform = QFormLayout() for j in list(range(100)): horizontalLayout = QHBoxLayout() self.myform.addRow(horizontalLayout) self.rowsview.append(horizontalLayout) self.mygroupbox.setLayout(self.myform) scroll = QScrollArea(self) scroll.setWidget(self.mygroupbox) scroll.setWidgetResizable(True) scroll.setGeometry(QRect(250, 30, 500, 580)) scroll.setWidgetResizable(True) self.label_4 = QLabel(self) self.label_4.setGeometry(QRect(780, 30, 31, 16)) self.label_4.setPixmap(QPixmap("images/key.png")) self.label_4.setScaledContents(True) self.lineEdit = QLineEdit(self) self.lineEdit.setGeometry(QRect(820, 30, 180, 20)) self.lineEdit.setObjectName("lineEdit") self.lineEdit.setPlaceholderText(_fromUtf8('write your password')) self.lineEdit.setEchoMode(QLineEdit.Password) self.techniquesGroup = QGroupBox(self) self.tecniquesform = QFormLayout() self.techniquesGroup.setLayout(self.tecniquesform) self.techniquesScroll = QScrollArea(self) self.techniquesScroll.setGeometry(QRect(770, 100, 230, 300)) self.techniquesScroll.setWidget(self.techniquesGroup) self.techniquesScroll.setWidgetResizable(True) self.rowsTechiques = [] for i in list(range(8)): horizontalLayout = QHBoxLayout() self.tecniquesform.addRow(horizontalLayout) self.rowsTechiques.append(horizontalLayout) techniquesCombo = QComboBox() techniquesCombo.setGeometry(QRect(10, 50, 171, 22)) techniquesCombo.addItems(self.techniquesClass.keys()) self.techniques.append(techniquesCombo) self.rowsTechiques[0].addWidget(techniquesCombo) self.techniquesNumber = 1 self.addTechnique = QPushButton() self.addTechnique.setGeometry(QRect(90, 90, 31, 21)) self.addTechnique.setFixedSize(31, 21) self.addTechnique.setText('+') self.connect(self.addTechnique, SIGNAL("clicked()"), self.__eventAddTechnique) self.rowsTechiques[len(self.rowsTechiques) - 1].addWidget( self.addTechnique) self.okButton = QPushButton(self) self.okButton.setGeometry(QRect(920, 560, 80, 20)) self.okButton.setText('Start...') self.connect(self.okButton, SIGNAL("clicked()"), self.__eventInitEncryption) def __eventAddTechnique(self): techniquesCombo = QComboBox() techniquesCombo.setGeometry(QRect(10, 50, 171, 22)) techniquesCombo.addItems(self.techniquesClass.keys()) self.techniques.append(techniquesCombo) self.rowsTechiques[self.techniquesNumber].addWidget(techniquesCombo) self.techniquesNumber = self.techniquesNumber + 1 if ((len(self.rowsTechiques) - 1) == self.techniquesNumber): self.addTechnique.setEnabled(False) def __eventDirectoryChanged(self): index = self.treeView.currentIndex() self.__changeDirectory(self.fileSystemModel.filePath(index)) def __changeDirectory(self, path): for c in self.filesview: c.setParent(None) c.deleteLater() self.filesview = [] self.checkBox_2.setChecked(False) self.progressBars = {} for f in self.__getFiles(path): try: group = QGroupBox(f, self) group.setGeometry(QRect(20, 20, 100, 150)) group.setCheckable(True) group.setChecked(False) group.setFixedSize(100, 150) group.setFlat(True) group.setToolTip(f) label = QLabel(group) label.setScaledContents(True) label.setGeometry(QRect(5, 25, 90, 90)) label.setToolTip(f) progressBar = QProgressBar(group) progressBar.setGeometry(QRect(0, 70, 111, 10)) progressBar.setProperty("value", 0) progressBar.setTextVisible(False) progressBar.setToolTip('0%') progressBar.setVisible(False) self.progressBars[f] = progressBar self.filesview.append(group) from os.path import isfile if isfile(path + '/' + f): ext = f.split('.')[-1] if isfile('icons/' + ext.lower() + '.png'): label.setPixmap( QPixmap('icons/' + ext.lower() + '.png')) else: label.setPixmap(QPixmap('icons/default.png')) else: label.setPixmap(QPixmap('icons/folder.png')) self.connect(group, SIGNAL("clicked()"), self.__deselectFile) except ValueError: pass i = 0 for x in list(range(len(self.filesview))): if (x % 4) == 0: i = i + 1 self.rowsview[i].addWidget(self.filesview[x]) def __selectAllFiles(self): for o in self.filesview: o.setChecked(self.checkBox_2.isChecked()) def __deselectFile(self): #print 'deselect' self.checkBox_2.setChecked(False) def __arrozconpollo(self): self.__obtainSelectedFIles() def __obtainSelectedFIles(self): files = [] for o in self.filesview: if o.isChecked(): files.append(str(o.title())) self.progressBars[str(o.title())].setVisible(True) return files def __getFiles(self, path): from os import listdir from os.path import isfile f = [] for base in listdir(path): try: if isfile(path + '/' + base): f.append(base) except ValueError: pass f.sort() return f def __eventInitEncryption(self): if len(self.__obtainSelectedFIles()) == 0: msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("You must specify the files you want to encrypt") msg.setWindowTitle("CryptoSystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() return if str(self.lineEdit.text()).strip() == '': msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setText("You must specify a key") msg.setWindowTitle("CryptoSystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() return self.okButton.setEnabled(False) self.techniquesGroup.setEnabled(False) self.lineEdit.setEnabled(False) index = self.treeView.currentIndex() path = self.fileSystemModel.filePath(index) selectedFiles = self.__obtainSelectedFIles() from os.path import getsize blockSize = 4096 from hashlib import md5 Hash = md5() Hash.update(str(self.lineEdit.text())) key = Hash.hexdigest() for f in selectedFiles: f_in = open(path + '/' + f, 'rb') f_out = open( path + '/' + reduceMd5(checksum(path + '/' + f)) + '.cry', 'wb') f_out.write('CRYOGENESIS' + unhexlify('00') + 'ARCHIVE' + unhexlify('01')) header_list = '' techniquesObjects = [] for t in self.techniques: header_list = header_list + t.currentText() + ':' techniquesObjects.append(self.techniquesClass[str( t.currentText())](key)) file_header = str('header|' + str(f_in.name.split('/')[-1]) + '|' + str(header_list) + '|' + str(checksum(path + '/' + f))) aes = AES(key) f_out.write(aes.encrypt(file_header)) f_out.write(unhexlify('02')) in_size = getsize(path + '/' + f) in_progress = 0.0 block = f_in.read(blockSize) while (block): block_c = block for t in techniquesObjects: block_c = t.encrypt(block_c) f_out.write(block_c) in_progress = in_progress + blockSize progress = (in_progress / in_size) * 100 #print progress self.progressBars[str(f)].setProperty("value", int(progress)) self.progressBars[str(f)].setToolTip(str(progress) + '%') block = f_in.read(blockSize) f_in.close() f_out.close() msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("Encryption has successfully concluded") msg.setWindowTitle("CryptoSystems") msg.setStandardButtons(QMessageBox.Ok) msg.exec_() self.hide()
import sys from PyQt4.QtGui import (QApplication, QColumnView, QFileSystemModel, QSplitter, QTreeView) from PyQt4.QtCore import QDir, Qt if __name__ == '__main__': app = QApplication(sys.argv) # Splitter to show 2 views in same widget easily. splitter = QSplitter() # The model. model = QFileSystemModel() # You can setRootPath to any path. model.setRootPath(QDir.rootPath()) # List of views. views = [] for ViewType in (QColumnView, QTreeView): # Create the view in the splitter. view = ViewType(splitter) # Set the model of the view. view.setModel(model) # Set the root index of the view as the user's home directory. view.setRootIndex(model.index(QDir.homePath())) # Show the splitter. splitter.show() # Maximize the splitter. splitter.setWindowState(Qt.WindowMaximized) # Start the main loop. sys.exit(app.exec_())
class MainWindow(QWidget): ''' The initial method creates the window and connects the rename method. ''' def __init__(self): QWidget.__init__(self) self.setWindowTitle("cuteRenamer") #Set Data-Model for showing the directories self.dirModel = QFileSystemModel() self.dirModel.setRootPath('/') self.dirModel.setFilter(QDir.AllDirs | QDir.NoDotAndDotDot)#Show only directories without '.' and '..' #Set the view for the directories self.dirView = QTreeView() self.dirView.setModel(self.dirModel) #Show only the directories in the view self.dirView.setColumnHidden(1, True) self.dirView.setColumnHidden(2, True) self.dirView.setColumnHidden(3, True) self.dirView.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) #Listedit for the optional listfile listPathLabel = QLabel("Path to list:") self.listPathEdit = QLineEdit() #Start renaming with number... startLabel = QLabel("Start (default is 1)") self.startEdit = QLineEdit() #LineEdit for the prefix prefixLabel = QLabel("Prefix") self.prefixEdit = QLineEdit() #LineEdit for the postfix postfixLabel = QLabel("Postfix") self.postfixEdit = QLineEdit() #Checkbox to conserve file extensions self.checkboxConserve = QCheckBox("Conserve file extensions") checkboxLayout = QHBoxLayout() checkboxLayout.addStretch(1) checkboxLayout.addWidget(self.checkboxConserve) #The button to start renaming renameButton = QPushButton('Rename!') buttonsLayout = QHBoxLayout() buttonsLayout.addStretch(1) buttonsLayout.addWidget(renameButton) vertical = QVBoxLayout() vertical.addWidget(self.dirView) vertical.addSpacing(10) vertical.addWidget(listPathLabel) vertical.addWidget(self.listPathEdit) vertical.addSpacing(10) vertical.addWidget(startLabel) vertical.addWidget(self.startEdit) vertical.addSpacing(10) vertical.addWidget(prefixLabel) vertical.addWidget(self.prefixEdit) vertical.addSpacing(10) vertical.addWidget(postfixLabel) vertical.addWidget(self.postfixEdit) vertical.addSpacing(10) vertical.addLayout(checkboxLayout) vertical.addSpacing(20) vertical.addLayout(buttonsLayout) self.setLayout(vertical) #If the button is clicked start the renaming self.connect(renameButton, SIGNAL('clicked()'), self.rename) ''' This method prepares all options and starts the rename progress. ''' def rename(self): selectedIndex = self.dirView.selectedIndexes() if self.listPathEdit.text() == "": print "Read the whole directory" files = os.listdir(self.dirModel.filePath(selectedIndex[0])) elif (not self.listPathEdit.text() == "") and os.path.isfile(self.listPathEdit.text()): print "Read filenames from %s" % self.listPathEdit.text() files = [i.rstrip('\n') for i in open(self.listPathEdit.text(), "r")] else: print "Path to list doesn't exist or is not a file!" if not self.startEdit.text() == "": start = int(self.startEdit.text()) else: start = 1 prefix = self.prefixEdit.text() postfix = self.postfixEdit.text() if self.checkboxConserve.isChecked(): conserve = True else: conserve = False print "Start: %d\nPrefix: %s\nPostfix: %s\nConserve: %s" % (start, prefix, postfix, conserve) print "Change directory" os.chdir(self.dirModel.filePath(selectedIndex[0])) rename_files(start, prefix, postfix, conserve, files) ''' A simple close event. ''' def closeEvent(self, event): print "Quit application" exit()
class Window(QMainWindow): def __init__(self): super(Window, self).__init__() central_widget = QWidget() self._current_path = None self._use_suffix = False self._file_model = QFileSystemModel() self._file_model.setNameFilters(['*.jpg', '*.png']) self._file_model.setNameFilterDisables(False) self._file_model.setRootPath(QDir.rootPath()) self._file_selection_model = QItemSelectionModel(self._file_model) self._file_selection_model.currentChanged.connect(self._on_current_file_changed) self._file_tree = QTreeView(parent=self) self._file_tree.collapsed.connect(self._on_tree_expanded_collapsed) self._file_tree.expanded.connect(self._on_tree_expanded_collapsed) self._file_tree.setModel(self._file_model) self._file_tree.setSelectionModel(self._file_selection_model) self._file_tree.setColumnHidden(1, True) self._file_tree.setColumnHidden(2, True) self._file_tree.setColumnHidden(3, True) self._file_tree.header().hide() self._viewer = Viewer(Loader(24)) self._splitter = QSplitter(); self._splitter.addWidget(self._file_tree) self._splitter.addWidget(self._viewer) self._splitter.setStretchFactor(0, 0) self._splitter.setStretchFactor(1, 1) self._splitter.setCollapsible(0, False) self._layout = QGridLayout() self._layout.addWidget(self._splitter) self._switch_to_normal() central_widget.setLayout(self._layout) self._file_tree.installEventFilter(self); self.resize(800, 600) self.setWindowTitle('pyQtures') self.setCentralWidget(central_widget) self.show() def eventFilter(self, widget, event): if event.type() == QEvent.KeyPress: if event.key() == Qt.Key_Tab: self._toggle_path_suffix() return True return QMainWindow.eventFilter(self, widget, event) def _toggle_path_suffix(self): self._use_suffix = not self._use_suffix self._update_path() def _switch_to_fullscreen(self): self._splitter.widget(0).hide() self._layout.setMargin(0) self.showFullScreen() def _switch_to_normal(self): self._splitter.widget(0).show() self._layout.setMargin(4) self.showNormal() def keyPressEvent(self, key_event): # Signal handler. key = key_event.key() if self.isFullScreen(): self._full_screen_key_handler(key) else: self._normal_key_handler(key) def _full_screen_key_handler(self, key): if Qt.Key_Escape == key: self._switch_to_normal() elif Qt.Key_Return == key: self._switch_to_normal() elif Qt.Key_Up == key: self._go_to_sibling_image(-1) elif Qt.Key_Down == key: self._go_to_sibling_image(1) elif Qt.Key_Tab == key: self._toggle_path_suffix() def _go_to_sibling_image(self, offset): current = self._file_selection_model.currentIndex() nxt = current.sibling(current.row() + offset, current.column()) if (nxt.parent() != current.parent()): return # TODO(eustas): Iterate through dirs? self._file_selection_model.setCurrentIndex(nxt, QItemSelectionModel.SelectCurrent) def _normal_key_handler(self, key): if Qt.Key_Escape == key: QCoreApplication.instance().quit() elif Qt.Key_Return == key: self._switch_to_fullscreen() def _on_current_file_changed(self, new_current): new_path = self._file_model.filePath(new_current) if not self._current_path == new_path: self._current_path = new_path self._update_path() def _update_path(self): if not self._use_suffix: self._viewer.set_path(self._current_path) return self._viewer.reset_path() if not self._current_path: return selected_file = QFileInfo(self._current_path) if not selected_file.exists(): return selected_dir = selected_file.absoluteDir() file_name = selected_file.fileName() if not selected_dir.exists(): return if not selected_dir.cd('converted'): return suffixed_path = selected_dir.absoluteFilePath(file_name) self._viewer.set_path(suffixed_path) def _on_tree_expanded_collapsed(self, unused_index): QTimer.singleShot(1, lambda: self._file_tree.resizeColumnToContents(0))
def __init__(self, parent=None, viewtype=None): """ viewtype option specifies the file browser type of view ('tree' and 'table' are accepted, 'tree' is the default) :type viewtype: str """ super(MainWindow, self).__init__(parent) # # MODEL (is the default PyQt QFileSystemModel) # model = QFileSystemModel() model.setRootPath(QDir.currentPath()) # needed to fetch files model.setReadOnly(False) # # VIEW # # Select the view QWidget based on command prompt parameter # (table and tree view supported as far as now) if viewtype == 'table': view = TableView(self) elif viewtype == 'tree': view = TreeView(self) else: raise ValueError(u"'{}' view is not recognized. 'tree' or 'table' expected.".format(viewtype)) # passed self to use MainWindow's methods (see signal's TODO) logging.info(u'{}View'.format(viewtype.capitalize())) view.setModel(model) # If you set the root of the tree to the current path # you start much more quickly than leaving the default, that cause # detection of all drives on Windows (slow) if last_visited_directory: startpath = last_visited_directory else: startpath = QDir.currentPath() self.curpath = startpath view.setRootIndex(model.index(startpath)) # A generic 'view' attribute name is used. Don't care about the view # is a TreeView or a TableView or... self.view = view self.setCentralWidget(self.view) # STATUS BAR status = self.statusBar() status.setSizeGripEnabled(False) status.showMessage(tr('SB', "Ready"), 2000) self.status_bar = status # TODO: add message to the log wintitle = u'{} {}'.format(__title__, __date__.replace(u'-', u'.')) self.setWindowTitle(wintitle) # Selection behavior: SelectRows # (important if the view is a QTableView) self.view.setSelectionBehavior(view.SelectRows) # Set extended selection mode (ExtendedSelection is a standard) self.view.setSelectionMode(QTreeView.ExtendedSelection) # Enable the context menu self.view.setContextMenuPolicy(Qt.CustomContextMenu) self.connect(self.view, SIGNAL('customContextMenuRequested(const QPoint&)'), self.on_context_menu) # Double click on the view self.view.doubleClicked.connect(self.doubleclick) # Selection changed self.connect(self.view, SIGNAL('sel_changed(PyQt_PyObject)'), self.selChanged) # Creating window to show the textual content of files self.text_window = QTextEdit() # hidden for now (no method show() called) self.addOns = [] # let's populate self.addOns list with dynamically created AddOn instances of scripts for script in py_addons: modulename = path.splitext(path.split(script)[-1])[0] exec 'from scripts import {}'.format(modulename) try: exec 'self.addOns.append({}.AddOn(self))'.format(modulename) except BaseException as err: message = u'Error on script {}: {}'.format(err, modulename) print(message, args) self.status_bar.showMessage(message) logging.error(message) else: print(u"Loaded add-on '{}'".format(modulename))
class mainInitial(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow() #treeview UI self.ui.setupUi(self) self.showMaximized() self.home=os.getcwd() self.fileSystemModel = QFileSystemModel() #self.home=self.home + "/connections" #print (self.home) self.fillGrid2(self.home) #self.ui.treeWidget.isSortingEnabled() #self.ui.treeWidget.setSortingEnabled(True) self.ui.treeView.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.connect(self.ui.treeView, QtCore.SIGNAL("customContextMenuRequested(const QPoint &)"), self.onclick) #self.connect(self.ui.treeView.selectionModel(), # SIGNAL("customContextMenuRequested(pressed)"), self.onclick) # def eventFilter(self, obj, event): # if event.type() in (QtCore.QEvent.MouseButtonPress, QtCore.QEvent.MouseButtonDblClick): # if event.button() == QtCore.Qt.LeftButton: # print "left" # return True # elif event.button() == QtCore.Qt.RightButton: # print "Right" # return True # return super(mainInitial, self).eventFilter(obj, event) # # #self.button2.clicked.connect(self.on_button_clicked) # # #self.button1.installEventFilter(self) @QtCore.pyqtSlot(QtCore.QModelIndex) def onclick(self,selected): index=self.ui.treeView.indexAt(selected) #getSelected= self.ui.treeView.selectedItems() print (index) fileinfo = QtCore.QFileInfo(self.fileSystemModel.fileInfo(index) ) print (fileinfo) path = self.fileSystemModel.filePath(index) #pathABS =self.fileSystemModel.rootPath(index) print path #print pathABS if self.fileSystemModel.isDir(index): print ("es directorio") else: print ("es archivo") menu=QtGui.QMenu(self) action_1=menu.addAction("crear coneccion") action_1.triggered.connect(self.action1) action_2=menu.addAction("borrar coneccion") action_3=menu.addAction("Modificar coneccion") action_4=menu.addAction("Crear Carpeta") menu.exec_(QtGui.QCursor.pos()) #menu1=self.menu.addAction(u'algo') #menu1.triggered.connect(self.M1clear) #print ("determinar si esta vacio, es archivo o carpeta derecho") def action1(self, index): print "accion lanzada action_1" #self.fileSystemModel.mkdir() #print (self.ui.treeView.indexAt(index)) def fillGrid2(self,home): print (QDir.currentPath()) self.fileSystemModel.setRootPath(QDir.currentPath()) self.ui.treeView.setModel(self.fileSystemModel) self.ui.treeView.setRootIndex(self.fileSystemModel.index(QDir.currentPath())) self.ui.treeView.hideColumn(1) self.ui.treeView.hideColumn(2) self.ui.treeView.hideColumn(3)
@contact : ****@massclouds.com @site : http://blog.csdn.net/*** @software: PyCharm @time : 17-1-5 下午5:19 """ from PyQt4.QtGui import QApplication,QTreeView,QFileSystemModel, QListView from PyQt4.QtCore import QDir import sys if __name__ == '__main__': app = QApplication(sys.argv) # 1. 创建 模型 model */ model = QFileSystemModel() # 创建文件系统模型 model.setRootPath(QDir.currentPath()) # 指定要监视的目录 # 2. 创建 视图 view */ tree = QTreeView() # 创建树型视图 tree.setModel(model) # 为视图指定模型 tree.setRootIndex(model.index(QDir.currentPath() ))# 指定根索引 listw = QListView() # 创建列表视图 listw.setModel(model) # 为视图指定模型 listw.setRootIndex(model.index(QDir.currentPath()))# 指定根索引 tree.setWindowTitle("QTreeView") tree.show() listw.setWindowTitle("QListView") listw.show()