diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-01-05 15:58:35 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-01-12 12:28:10 +0000 |
commit | 9f2a9aba3aff73e31ea15eb4a7a04b0e50f4ee4e (patch) | |
tree | 92dcb0c4f64df8a8375af2e1a9bb1170068c36b2 /examples/widgets/dialogs/findfiles.py | |
parent | 26c046e521c38bbfc3a263782a3bb74a7c1bf937 (diff) |
Move examples from submodule to pyside-setup
Move PySide2 examples that are owned by the Qt Company
to a new examples directory.
Done-with: Venugopal Shivashankar <Venugopal.Shivashankar@qt.io>
Task-number: PYSIDE-363
Change-Id: I14099764d9eef2bc35e067086121427955862e3a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'examples/widgets/dialogs/findfiles.py')
-rwxr-xr-x | examples/widgets/dialogs/findfiles.py | 211 |
1 files changed, 211 insertions, 0 deletions
diff --git a/examples/widgets/dialogs/findfiles.py b/examples/widgets/dialogs/findfiles.py new file mode 100755 index 000000000..cc410335f --- /dev/null +++ b/examples/widgets/dialogs/findfiles.py @@ -0,0 +1,211 @@ +#!/usr/bin/env python + +############################################################################# +## +## 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 PySide 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_()) |