Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import os
- from PySide2 import QtCore, QtGui, QtWidgets
- from ui import Ui_MainWindow
- from datetime import datetime
- class FileManager(Ui_MainWindow):
- def __init__(self):
- app = QtWidgets.QApplication(sys.argv)
- main_window = QtWidgets.QMainWindow()
- self.path = ''
- self.history = []
- self.history_index = -1
- self.drives = [chr(x) + ":/" for x in range(65, 90) if os.path.exists(chr(x) + ":")]
- self.setupUi(main_window)
- self.tableWidget.horizontalHeader().setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
- self.tableWidget.horizontalHeader().setSectionResizeMode(1, QtWidgets.QHeaderView.ResizeToContents)
- self.tableWidget.horizontalHeader().setSectionResizeMode(2, QtWidgets.QHeaderView.ResizeToContents)
- self.tableWidget.horizontalHeader().setSectionResizeMode(3, QtWidgets.QHeaderView.ResizeToContents)
- main_window.setWindowTitle('Файловый менеджер')
- for drive in self.drives:
- self.listWidget.addItem(drive)
- self.tableWidget.itemDoubleClicked.connect(self.choose_dir_or_file)
- self.listWidget.itemDoubleClicked.connect(self.choose_menu)
- self.pushButton.clicked.connect(self.up)
- self.pushButton_2.clicked.connect(self.back)
- self.pushButton_3.clicked.connect(self.forward)
- self.lineEdit.returnPressed.connect(self.line_edit)
- main_window.show()
- sys.exit(app.exec_())
- def file_open(self):
- os.startfile(self.path)
- def line_edit(self):
- path_prev = self.path
- if len(self.lineEdit.text()) < 1:
- self.lineEdit.setText('')
- else:
- try:
- self.history_index += 1
- self.path = self.lineEdit.text()
- path_slash_fix = self.path[-1:]
- if path_slash_fix[0] != '/':
- self.path += '/'
- self.render_path()
- self.lineEdit.setText(self.path)
- self.history.append(self.path)
- self.history_rewrite()
- except FileNotFoundError:
- try:
- self.path = path_prev
- self.lineEdit.setText(self.history[self.history_index - 1])
- except IndexError:
- self.lineEdit.setText('')
- self.history_index -= 1
- except NotADirectoryError:
- self.file_open()
- self.path = path_prev
- self.lineEdit.setText(self.path)
- self.history_index -= 1
- def history_rewrite(self):
- self.history[self.history_index] = self.path
- history_fixed = []
- for i in range(self.history_index + 1):
- history_fixed.append(self.history[i])
- self.history = history_fixed
- def back(self):
- if not self.history_index <= 0:
- try:
- self.history_index -= 1
- self.path = self.history[self.history_index]
- self.render_path()
- self.lineEdit.setText(self.path)
- except IndexError:
- self.history_index += 1
- def forward(self):
- try:
- self.history_index += 1
- self.path = self.history[self.history_index]
- self.render_path()
- self.lineEdit.setText(self.path)
- except IndexError:
- self.history_index -= 1
- def up(self):
- path_check = self.path[:-1]
- if path_check.__contains__('/'):
- count = 1
- for i in path_check[::-1]:
- if i == '/':
- break
- count += 1
- self.path = self.path[:-count]
- self.render_path()
- self.lineEdit.setText(self.path)
- def choose_menu(self, item):
- self.path = item.text()
- self.render_path()
- self.lineEdit.setText(self.path)
- self.history.append(self.path)
- self.history_index += 1
- self.history_rewrite()
- def choose_dir_or_file(self, item):
- path_prev = self.path
- try:
- self.path = self.path + item.text() + '/'
- self.render_path()
- self.lineEdit.setText(self.path)
- self.history.append(self.path)
- self.history_index += 1
- except FileNotFoundError:
- self.path = path_prev
- except NotADirectoryError:
- self.file_open()
- self.path = path_prev
- self.lineEdit.setText(self.path)
- self.history_rewrite()
- def render_path(self):
- count = 0
- for obj in os.scandir(self.path):
- if str(obj.name).startswith('$') or obj.is_file():
- continue
- item = QtWidgets.QTableWidgetItem(obj.name)
- self.tableWidget.setRowCount(count + 1)
- self.tableWidget.setItem(count, 0, item)
- time_created = datetime.fromtimestamp(os.path.getctime(self.path + obj.name)).strftime('%Y-%m-%d %H:%M:%S')
- item = QtWidgets.QTableWidgetItem(time_created)
- self.tableWidget.setItem(count, 1, item)
- time_modified = datetime.fromtimestamp(os.path.getmtime(self.path + obj.name)).strftime('%Y-%m-%d %H:%M:%S')
- item = QtWidgets.QTableWidgetItem(time_modified)
- self.tableWidget.setItem(count, 2, item)
- item = QtWidgets.QTableWidgetItem('')
- self.tableWidget.setItem(count, 3, item)
- count += 1
- for obj in os.scandir(self.path):
- if str(obj.name).startswith('$') or obj.is_dir():
- continue
- item = QtWidgets.QTableWidgetItem(obj.name)
- self.tableWidget.setRowCount(count + 1)
- self.tableWidget.setItem(count, 0, item)
- time_created = datetime.fromtimestamp(os.path.getctime(self.path + obj.name)).strftime('%Y-%m-%d %H:%M:%S')
- item = QtWidgets.QTableWidgetItem(time_created)
- self.tableWidget.setItem(count, 1, item)
- time_modified = datetime.fromtimestamp(os.path.getmtime(self.path + obj.name)).strftime('%Y-%m-%d %H:%M:%S')
- item = QtWidgets.QTableWidgetItem(time_modified)
- self.tableWidget.setItem(count, 2, item)
- size = os.path.getsize(obj) / 1024
- size_type = 0
- while True:
- if size < 1024:
- break
- size = size / 1024
- size_type += 1
- if size_type == 0:
- size_type = ' Кбайт.'
- elif size_type == 1:
- size_type = ' Мбайт.'
- elif size_type == 2:
- size_type = ' Гбайт.'
- elif size_type == 3:
- size_type = ' Тбайт.'
- size = round(size)
- item = QtWidgets.QTableWidgetItem(str(size) + size_type)
- self.tableWidget.setItem(count, 3, item)
- count += 1
- if __name__ == '__main__':
- FileManager()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement