diff options
Diffstat (limited to 'examples/widgets/dialogs/findfiles.py')
-rw-r--r-- | examples/widgets/dialogs/findfiles.py | 210 |
1 files changed, 0 insertions, 210 deletions
diff --git a/examples/widgets/dialogs/findfiles.py b/examples/widgets/dialogs/findfiles.py deleted file mode 100644 index 9d18324ad..000000000 --- a/examples/widgets/dialogs/findfiles.py +++ /dev/null @@ -1,210 +0,0 @@ - -############################################################################# -## -## Copyright (C) 2013 Riverbank Computing Limited. -## Copyright (C) 2016 The Qt Company Ltd. -## Contact: http://www.qt.io/licensing/ -## -## This file is part of the Qt for Python examples of the Qt Toolkit. -## -## $QT_BEGIN_LICENSE:BSD$ -## You may use this file under the terms of the BSD license as follows: -## -## "Redistribution and use in source and binary forms, with or without -## modification, are permitted provided that the following conditions are -## met: -## * Redistributions of source code must retain the above copyright -## notice, this list of conditions and the following disclaimer. -## * Redistributions in binary form must reproduce the above copyright -## notice, this list of conditions and the following disclaimer in -## the documentation and/or other materials provided with the -## distribution. -## * Neither the name of The Qt Company Ltd nor the names of its -## contributors may be used to endorse or promote products derived -## from this software without specific prior written permission. -## -## -## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -## "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -## LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -## A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -## OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -## OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -## -## $QT_END_LICENSE$ -## -############################################################################# - -"""PySide2 port of the widgets/dialogs/findfiles example from Qt v5.x""" - -from PySide2 import QtCore, QtGui, QtWidgets - - -class Window(QtWidgets.QDialog): - def __init__(self, parent=None): - super(Window, self).__init__(parent) - - self.browseButton = self.createButton("&Browse...", self.browse) - self.findButton = self.createButton("&Find", self.find) - - self.fileComboBox = self.createComboBox("*") - self.textComboBox = self.createComboBox() - self.directoryComboBox = self.createComboBox(QtCore.QDir.currentPath()) - - fileLabel = QtWidgets.QLabel("Named:") - textLabel = QtWidgets.QLabel("Containing text:") - directoryLabel = QtWidgets.QLabel("In directory:") - self.filesFoundLabel = QtWidgets.QLabel() - - self.createFilesTable() - - buttonsLayout = QtWidgets.QHBoxLayout() - buttonsLayout.addStretch() - buttonsLayout.addWidget(self.findButton) - - mainLayout = QtWidgets.QGridLayout() - mainLayout.addWidget(fileLabel, 0, 0) - mainLayout.addWidget(self.fileComboBox, 0, 1, 1, 2) - mainLayout.addWidget(textLabel, 1, 0) - mainLayout.addWidget(self.textComboBox, 1, 1, 1, 2) - mainLayout.addWidget(directoryLabel, 2, 0) - mainLayout.addWidget(self.directoryComboBox, 2, 1) - mainLayout.addWidget(self.browseButton, 2, 2) - mainLayout.addWidget(self.filesTable, 3, 0, 1, 3) - mainLayout.addWidget(self.filesFoundLabel, 4, 0) - mainLayout.addLayout(buttonsLayout, 5, 0, 1, 3) - self.setLayout(mainLayout) - - self.setWindowTitle("Find Files") - self.resize(500, 300) - - def browse(self): - directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Find Files", - QtCore.QDir.currentPath()) - - if directory: - if self.directoryComboBox.findText(directory) == -1: - self.directoryComboBox.addItem(directory) - - self.directoryComboBox.setCurrentIndex(self.directoryComboBox.findText(directory)) - - @staticmethod - def updateComboBox(comboBox): - if comboBox.findText(comboBox.currentText()) == -1: - comboBox.addItem(comboBox.currentText()) - - def find(self): - self.filesTable.setRowCount(0) - - fileName = self.fileComboBox.currentText() - text = self.textComboBox.currentText() - path = self.directoryComboBox.currentText() - - self.updateComboBox(self.fileComboBox) - self.updateComboBox(self.textComboBox) - self.updateComboBox(self.directoryComboBox) - - self.currentDir = QtCore.QDir(path) - if not fileName: - fileName = "*" - files = self.currentDir.entryList([fileName], - QtCore.QDir.Files | QtCore.QDir.NoSymLinks) - - if text: - files = self.findFiles(files, text) - self.showFiles(files) - - def findFiles(self, files, text): - progressDialog = QtWidgets.QProgressDialog(self) - - progressDialog.setCancelButtonText("&Cancel") - progressDialog.setRange(0, len(files)) - progressDialog.setWindowTitle("Find Files") - - foundFiles = [] - - for i in range(len(files)): - progressDialog.setValue(i) - progressDialog.setLabelText("Searching file number %d of %d..." % (i, len(files))) - QtCore.qApp.processEvents() - - if progressDialog.wasCanceled(): - break - - inFile = QtCore.QFile(self.currentDir.absoluteFilePath(files[i])) - - if inFile.open(QtCore.QIODevice.ReadOnly): - stream = QtCore.QTextStream(inFile) - while not stream.atEnd(): - if progressDialog.wasCanceled(): - break - line = stream.readLine() - if text in line: - foundFiles.append(files[i]) - break - - progressDialog.close() - - return foundFiles - - def showFiles(self, files): - for fn in files: - file = QtCore.QFile(self.currentDir.absoluteFilePath(fn)) - size = QtCore.QFileInfo(file).size() - - fileNameItem = QtWidgets.QTableWidgetItem(fn) - fileNameItem.setFlags(fileNameItem.flags() ^ QtCore.Qt.ItemIsEditable) - sizeItem = QtWidgets.QTableWidgetItem("%d KB" % (int((size + 1023) / 1024))) - sizeItem.setTextAlignment(QtCore.Qt.AlignVCenter | QtCore.Qt.AlignRight) - sizeItem.setFlags(sizeItem.flags() ^ QtCore.Qt.ItemIsEditable) - - row = self.filesTable.rowCount() - self.filesTable.insertRow(row) - self.filesTable.setItem(row, 0, fileNameItem) - self.filesTable.setItem(row, 1, sizeItem) - - self.filesFoundLabel.setText("%d file(s) found (Double click on a file to open it)" % len(files)) - - def createButton(self, text, member): - button = QtWidgets.QPushButton(text) - button.clicked.connect(member) - return button - - def createComboBox(self, text=""): - comboBox = QtWidgets.QComboBox() - comboBox.setEditable(True) - comboBox.addItem(text) - comboBox.setSizePolicy(QtWidgets.QSizePolicy.Expanding, - QtWidgets.QSizePolicy.Preferred) - return comboBox - - def createFilesTable(self): - self.filesTable = QtWidgets.QTableWidget(0, 2) - self.filesTable.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) - - self.filesTable.setHorizontalHeaderLabels(("File Name", "Size")) - self.filesTable.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch) - self.filesTable.verticalHeader().hide() - self.filesTable.setShowGrid(False) - - self.filesTable.cellActivated.connect(self.openFileOfItem) - - def openFileOfItem(self, row, column): - item = self.filesTable.item(row, 0) - - QtGui.QDesktopServices.openUrl(QtCore.QUrl(self.currentDir.absoluteFilePath(item.text()))) - - -if __name__ == '__main__': - - import sys - - app = QtWidgets.QApplication(sys.argv) - window = Window() - window.show() - sys.exit(app.exec_()) |