-
-
Save anonymous/f741ffdbf5521d94395bbfbb4bfa471d to your computer and use it in GitHub Desktop.
wykop_wyzwaniepython_zadanie3_trudne
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<ui version="4.0"> | |
<class>FileExplorerWindow</class> | |
<widget class="QMainWindow" name="FileExplorerWindow"> | |
<property name="geometry"> | |
<rect> | |
<x>0</x> | |
<y>0</y> | |
<width>486</width> | |
<height>456</height> | |
</rect> | |
</property> | |
<property name="windowTitle"> | |
<string>File explorer</string> | |
</property> | |
<widget class="QWidget" name="centralwidget"> | |
<widget class="QListView" name="filesList"> | |
<property name="enabled"> | |
<bool>true</bool> | |
</property> | |
<property name="geometry"> | |
<rect> | |
<x>20</x> | |
<y>50</y> | |
<width>361</width> | |
<height>221</height> | |
</rect> | |
</property> | |
<property name="editTriggers"> | |
<set>QAbstractItemView::NoEditTriggers</set> | |
</property> | |
</widget> | |
<widget class="QPushButton" name="levelUpButton"> | |
<property name="geometry"> | |
<rect> | |
<x>390</x> | |
<y>10</y> | |
<width>75</width> | |
<height>23</height> | |
</rect> | |
</property> | |
<property name="text"> | |
<string>▲ Level up</string> | |
</property> | |
<property name="shortcut"> | |
<string>Backspace</string> | |
</property> | |
</widget> | |
<widget class="QLineEdit" name="pathLineEdit"> | |
<property name="geometry"> | |
<rect> | |
<x>20</x> | |
<y>10</y> | |
<width>361</width> | |
<height>20</height> | |
</rect> | |
</property> | |
</widget> | |
<widget class="QPlainTextEdit" name="fileInfoTextEdit"> | |
<property name="enabled"> | |
<bool>false</bool> | |
</property> | |
<property name="geometry"> | |
<rect> | |
<x>20</x> | |
<y>280</y> | |
<width>441</width> | |
<height>121</height> | |
</rect> | |
</property> | |
</widget> | |
<widget class="QPushButton" name="newFileButton"> | |
<property name="geometry"> | |
<rect> | |
<x>390</x> | |
<y>50</y> | |
<width>75</width> | |
<height>23</height> | |
</rect> | |
</property> | |
<property name="text"> | |
<string>New file</string> | |
</property> | |
</widget> | |
<widget class="QPushButton" name="removeButton"> | |
<property name="geometry"> | |
<rect> | |
<x>390</x> | |
<y>80</y> | |
<width>75</width> | |
<height>23</height> | |
</rect> | |
</property> | |
<property name="text"> | |
<string>Remove</string> | |
</property> | |
</widget> | |
<widget class="QPushButton" name="moveButton"> | |
<property name="geometry"> | |
<rect> | |
<x>390</x> | |
<y>110</y> | |
<width>75</width> | |
<height>23</height> | |
</rect> | |
</property> | |
<property name="text"> | |
<string>Move</string> | |
</property> | |
</widget> | |
<widget class="QPushButton" name="copyButton"> | |
<property name="geometry"> | |
<rect> | |
<x>390</x> | |
<y>140</y> | |
<width>75</width> | |
<height>23</height> | |
</rect> | |
</property> | |
<property name="text"> | |
<string>Copy</string> | |
</property> | |
</widget> | |
</widget> | |
<widget class="QMenuBar" name="menubar"> | |
<property name="geometry"> | |
<rect> | |
<x>0</x> | |
<y>0</y> | |
<width>486</width> | |
<height>21</height> | |
</rect> | |
</property> | |
</widget> | |
<widget class="QStatusBar" name="statusbar"/> | |
</widget> | |
<resources/> | |
<connections/> | |
</ui> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# Form implementation generated from reading ui file '.\FileExplorer.ui' | |
# | |
# Created by: PyQt4 UI code generator 4.11.4 | |
# | |
# WARNING! All changes made in this file will be lost! | |
from PyQt4 import QtCore, QtGui | |
try: | |
_fromUtf8 = QtCore.QString.fromUtf8 | |
except AttributeError: | |
def _fromUtf8(s): | |
return s | |
try: | |
_encoding = QtGui.QApplication.UnicodeUTF8 | |
def _translate(context, text, disambig): | |
return QtGui.QApplication.translate(context, text, disambig, _encoding) | |
except AttributeError: | |
def _translate(context, text, disambig): | |
return QtGui.QApplication.translate(context, text, disambig) | |
class Ui_FileExplorerWindow(object): | |
def setupUi(self, FileExplorerWindow): | |
FileExplorerWindow.setObjectName(_fromUtf8("FileExplorerWindow")) | |
FileExplorerWindow.resize(486, 456) | |
self.centralwidget = QtGui.QWidget(FileExplorerWindow) | |
self.centralwidget.setObjectName(_fromUtf8("centralwidget")) | |
self.filesList = QtGui.QListView(self.centralwidget) | |
self.filesList.setEnabled(True) | |
self.filesList.setGeometry(QtCore.QRect(20, 50, 361, 221)) | |
self.filesList.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers) | |
self.filesList.setObjectName(_fromUtf8("filesList")) | |
self.levelUpButton = QtGui.QPushButton(self.centralwidget) | |
self.levelUpButton.setGeometry(QtCore.QRect(390, 10, 75, 23)) | |
self.levelUpButton.setObjectName(_fromUtf8("levelUpButton")) | |
self.pathLineEdit = QtGui.QLineEdit(self.centralwidget) | |
self.pathLineEdit.setGeometry(QtCore.QRect(20, 10, 361, 20)) | |
self.pathLineEdit.setObjectName(_fromUtf8("pathLineEdit")) | |
self.fileInfoTextEdit = QtGui.QPlainTextEdit(self.centralwidget) | |
self.fileInfoTextEdit.setEnabled(False) | |
self.fileInfoTextEdit.setGeometry(QtCore.QRect(20, 280, 441, 121)) | |
self.fileInfoTextEdit.setObjectName(_fromUtf8("fileInfoTextEdit")) | |
self.newFileButton = QtGui.QPushButton(self.centralwidget) | |
self.newFileButton.setGeometry(QtCore.QRect(390, 50, 75, 23)) | |
self.newFileButton.setObjectName(_fromUtf8("newFileButton")) | |
self.removeButton = QtGui.QPushButton(self.centralwidget) | |
self.removeButton.setGeometry(QtCore.QRect(390, 80, 75, 23)) | |
self.removeButton.setObjectName(_fromUtf8("removeButton")) | |
self.moveButton = QtGui.QPushButton(self.centralwidget) | |
self.moveButton.setGeometry(QtCore.QRect(390, 110, 75, 23)) | |
self.moveButton.setObjectName(_fromUtf8("moveButton")) | |
self.copyButton = QtGui.QPushButton(self.centralwidget) | |
self.copyButton.setGeometry(QtCore.QRect(390, 140, 75, 23)) | |
self.copyButton.setObjectName(_fromUtf8("copyButton")) | |
FileExplorerWindow.setCentralWidget(self.centralwidget) | |
self.menubar = QtGui.QMenuBar(FileExplorerWindow) | |
self.menubar.setGeometry(QtCore.QRect(0, 0, 486, 21)) | |
self.menubar.setObjectName(_fromUtf8("menubar")) | |
FileExplorerWindow.setMenuBar(self.menubar) | |
self.statusbar = QtGui.QStatusBar(FileExplorerWindow) | |
self.statusbar.setObjectName(_fromUtf8("statusbar")) | |
FileExplorerWindow.setStatusBar(self.statusbar) | |
self.retranslateUi(FileExplorerWindow) | |
QtCore.QMetaObject.connectSlotsByName(FileExplorerWindow) | |
def retranslateUi(self, FileExplorerWindow): | |
FileExplorerWindow.setWindowTitle(_translate("FileExplorerWindow", "File explorer", None)) | |
self.levelUpButton.setText(_translate("FileExplorerWindow", "▲ Level up", None)) | |
self.levelUpButton.setShortcut(_translate("FileExplorerWindow", "Backspace", None)) | |
self.newFileButton.setText(_translate("FileExplorerWindow", "New file", None)) | |
self.removeButton.setText(_translate("FileExplorerWindow", "Remove", None)) | |
self.moveButton.setText(_translate("FileExplorerWindow", "Move", None)) | |
self.copyButton.setText(_translate("FileExplorerWindow", "Copy", None)) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<ui version="4.0"> | |
<class>FileNameDialog</class> | |
<widget class="QDialog" name="FileNameDialog"> | |
<property name="geometry"> | |
<rect> | |
<x>0</x> | |
<y>0</y> | |
<width>353</width> | |
<height>80</height> | |
</rect> | |
</property> | |
<property name="windowTitle"> | |
<string>Enter file name</string> | |
</property> | |
<widget class="QDialogButtonBox" name="buttonBox"> | |
<property name="geometry"> | |
<rect> | |
<x>0</x> | |
<y>40</y> | |
<width>341</width> | |
<height>32</height> | |
</rect> | |
</property> | |
<property name="orientation"> | |
<enum>Qt::Horizontal</enum> | |
</property> | |
<property name="standardButtons"> | |
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> | |
</property> | |
</widget> | |
<widget class="QLineEdit" name="filenameLineEdit"> | |
<property name="geometry"> | |
<rect> | |
<x>10</x> | |
<y>10</y> | |
<width>331</width> | |
<height>20</height> | |
</rect> | |
</property> | |
</widget> | |
</widget> | |
<resources/> | |
<connections> | |
<connection> | |
<sender>buttonBox</sender> | |
<signal>accepted()</signal> | |
<receiver>FileNameDialog</receiver> | |
<slot>accept()</slot> | |
<hints> | |
<hint type="sourcelabel"> | |
<x>248</x> | |
<y>254</y> | |
</hint> | |
<hint type="destinationlabel"> | |
<x>157</x> | |
<y>274</y> | |
</hint> | |
</hints> | |
</connection> | |
<connection> | |
<sender>buttonBox</sender> | |
<signal>rejected()</signal> | |
<receiver>FileNameDialog</receiver> | |
<slot>reject()</slot> | |
<hints> | |
<hint type="sourcelabel"> | |
<x>316</x> | |
<y>260</y> | |
</hint> | |
<hint type="destinationlabel"> | |
<x>286</x> | |
<y>274</y> | |
</hint> | |
</hints> | |
</connection> | |
</connections> | |
</ui> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
# Form implementation generated from reading ui file '.\FileName.ui' | |
# | |
# Created by: PyQt4 UI code generator 4.11.4 | |
# | |
# WARNING! All changes made in this file will be lost! | |
from PyQt4 import QtCore, QtGui | |
try: | |
_fromUtf8 = QtCore.QString.fromUtf8 | |
except AttributeError: | |
def _fromUtf8(s): | |
return s | |
try: | |
_encoding = QtGui.QApplication.UnicodeUTF8 | |
def _translate(context, text, disambig): | |
return QtGui.QApplication.translate(context, text, disambig, _encoding) | |
except AttributeError: | |
def _translate(context, text, disambig): | |
return QtGui.QApplication.translate(context, text, disambig) | |
class Ui_FileNameDialog(object): | |
def setupUi(self, FileNameDialog): | |
FileNameDialog.setObjectName(_fromUtf8("FileNameDialog")) | |
FileNameDialog.resize(353, 80) | |
self.buttonBox = QtGui.QDialogButtonBox(FileNameDialog) | |
self.buttonBox.setGeometry(QtCore.QRect(0, 40, 341, 32)) | |
self.buttonBox.setOrientation(QtCore.Qt.Horizontal) | |
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) | |
self.buttonBox.setObjectName(_fromUtf8("buttonBox")) | |
self.filenameLineEdit = QtGui.QLineEdit(FileNameDialog) | |
self.filenameLineEdit.setGeometry(QtCore.QRect(10, 10, 331, 20)) | |
self.filenameLineEdit.setObjectName(_fromUtf8("filenameLineEdit")) | |
self.retranslateUi(FileNameDialog) | |
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), FileNameDialog.accept) | |
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), FileNameDialog.reject) | |
QtCore.QMetaObject.connectSlotsByName(FileNameDialog) | |
def retranslateUi(self, FileNameDialog): | |
FileNameDialog.setWindowTitle(_translate("FileNameDialog", "Enter file name", None)) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from sys import stdin | |
import os | |
import datetime | |
import shutil | |
def print_working_directory(): | |
return os.path.abspath(os.curdir) | |
def change_directory(path): | |
if os.path.isdir(path): | |
os.chdir(path) | |
return None | |
else: | |
return FileNotFoundError() | |
def copy(path1, path2): | |
if os.path.exists(path1): | |
if os.path.isdir(path1): | |
shutil.copytree(path1, path2) | |
else: | |
shutil.copy(path1, path2) | |
return None | |
else: | |
return "'{}' does not exist".format(path) | |
def move(path1, path2): | |
shutil.move(path1, path2) | |
return None | |
def info(path): | |
result = [] | |
abs_path = os.path.abspath("{}\{}".format(os.curdir, path)) | |
if os.path.isfile(abs_path): | |
type = "plik" | |
elif os.path.isdir(abs_path): | |
type = "katalog" | |
else: | |
type = "inny" | |
result.append("typ: {}".format(type)) | |
result.append("sciezka: {}".format(abs_path)) | |
result.append("rozmiar: {}".format(os.path.getsize(abs_path))) | |
if os.path.isdir(abs_path): | |
numberOfFiles = len([name for name in os.listdir(abs_path) if os.path.isfile(name)]) | |
result.append("liczba_plikow: {}".format(numberOfFiles)) | |
ctime = datetime.datetime.fromtimestamp(os.path.getctime(abs_path)) | |
mtime = datetime.datetime.fromtimestamp(os.path.getmtime(abs_path)) | |
result.append("ctime: {}".format(ctime.date())) | |
result.append("mtime: {}".format(mtime.date())) | |
return "\n".join(result) | |
def list_files(): | |
filesList = os.listdir(os.curdir) | |
filesString = "\n".join(filesList) | |
return filesString | |
def remove(path): | |
if os.path.exists(path): | |
if os.path.isdir(path): | |
shutil.rmtree(path) | |
else: | |
os.remove(path) | |
return None | |
else: | |
return "'{}' does not exist".format(path) | |
def touch(filename): | |
with open(filename, 'a'): | |
os.utime(filename) | |
return None | |
def parse(cmd, *args, **kwargs): | |
if cmd == "pwd": | |
return print_working_directory() | |
elif cmd == "cd": | |
return change_directory(args[0]) | |
elif cmd == "cp": | |
return copy(args[0], args[1]) | |
elif cmd == "mv": | |
return move(args[0], args[1]) | |
elif cmd == "info": | |
return info(args[0]) | |
elif cmd == "ls": | |
return list_files() | |
elif cmd == "rm": | |
return remove(args[0]) | |
elif cmd == "touch": | |
return touch(args[0]) | |
else: | |
return None | |
def main(): | |
while True: | |
line = stdin.readline() | |
arguments = line.split() | |
if len(arguments) > 0: | |
result = parse(*arguments) | |
if result is not None: | |
print(result) | |
if __name__ == "__main__": | |
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
from PyQt4 import QtCore, QtGui | |
from FileExplorerUi import Ui_FileExplorerWindow | |
from PyQt4.QtGui import QStandardItemModel, QStandardItem, QItemSelection, QDialog | |
from zadanie3 import print_working_directory, change_directory, list_files, info, touch, copy, remove, move | |
from FileNameUi import Ui_FileNameDialog | |
class StartQT(QtGui.QMainWindow): | |
def __init__(self, parent=None): | |
QtGui.QWidget.__init__(self, parent) | |
ui = Ui_FileExplorerWindow() | |
self.ui = ui | |
self.ui.setupUi(self) | |
ui.pathLineEdit.textChanged.connect(self.refresh) | |
ui.pathLineEdit.setText(print_working_directory()) | |
ui.filesList.doubleClicked.connect(self.changeDir) | |
ui.levelUpButton.clicked.connect(self.levelUp) | |
ui.newFileButton.clicked.connect(self.newFile) | |
ui.copyButton.clicked.connect(self.copyFile) | |
ui.moveButton.clicked.connect(self.moveFile) | |
ui.removeButton.clicked.connect(self.removeFile) | |
def refresh(self): | |
model = QStandardItemModel(self.ui.filesList) | |
filesList = list_files().split("\n") | |
for file in filesList: | |
item = QStandardItem(file) | |
model.appendRow(item) | |
self.ui.filesList.setModel(model) | |
self.ui.filesList.selectionModel().selectionChanged.connect(self.fileInfo) | |
def fileInfo(self, selected, deselected): | |
if len(selected.indexes()) > 0: | |
index = selected.indexes()[0] | |
elif len(deselected.indexes()) > 0: | |
index = deselected.indexes()[0] | |
path = self.ui.filesList.model().itemData(index)[0] | |
fileInfo = info(path) | |
self.ui.fileInfoTextEdit.clear() | |
self.ui.fileInfoTextEdit.insertPlainText(fileInfo) | |
def changeDir(self, index): | |
path = self.ui.filesList.model().itemData(index)[0] | |
result = change_directory(path) | |
if not isinstance(result, FileNotFoundError): | |
self.ui.pathLineEdit.setText(print_working_directory()) | |
self.ui.fileInfoTextEdit.clear() | |
def levelUp(self): | |
change_directory("../") | |
self.ui.pathLineEdit.setText(print_working_directory()) | |
def showDialog(self, function, *args): | |
dialog = QDialog() | |
dialog.ui = Ui_FileNameDialog() | |
dialog.ui.setupUi(dialog) | |
dialog.ui.filenameLineEdit.setFocus() | |
result = dialog.exec_() | |
if result == QDialog.Accepted: | |
filename = dialog.ui.filenameLineEdit.text() | |
args += (filename,) | |
function(*args) | |
self.refresh() | |
def newFile(self): | |
self.showDialog(touch) | |
def copyFile(self): | |
filesList = self.ui.filesList | |
if len(filesList.selectedIndexes()) == 1: | |
path = filesList.model().itemData(filesList.selectedIndexes()[0])[0] | |
self.showDialog(copy, path) | |
def moveFile(self): | |
filesList = self.ui.filesList | |
if len(filesList.selectedIndexes()) == 1: | |
path = filesList.model().itemData(filesList.selectedIndexes()[0])[0] | |
self.showDialog(move, path) | |
def removeFile(self): | |
filesList = self.ui.filesList | |
if len(filesList.selectedIndexes()) == 1: | |
path = filesList.model().itemData(filesList.selectedIndexes()[0])[0] | |
remove(path) | |
self.refresh() | |
if __name__ == "__main__": | |
app = QtGui.QApplication(sys.argv) | |
myapp = StartQT() | |
myapp.show() | |
sys.exit(app.exec_()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment