Skip to content

Commit 5061fdc

Browse files
authored
FixedIssue file_user.py
Fixed some bugs
1 parent 35e1dae commit 5061fdc

File tree

1 file changed

+68
-65
lines changed

1 file changed

+68
-65
lines changed

file_user.py

Lines changed: 68 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
11
import os
22
import sys
3-
from PyQt5.QtWidgets import QApplication, QMainWindow, QAction, QMenu, QMenuBar, QWidget, QLineEdit, QListWidget, QLabel, QMessageBox,QVBoxLayout
4-
from PyQt5.QtGui import QIcon, QPalette, QColor
3+
import shutil
4+
from PyQt5.QtWidgets import (QApplication, QMainWindow, QAction, QMenu, QMenuBar, QWidget,
5+
QLineEdit, QListWidget, QLabel, QMessageBox,
6+
QFileDialog, QInputDialog, QVBoxLayout)
7+
from PyQt5.QtGui import QIcon, QPalette, QColor
58
from PyQt5.QtCore import Qt
69

710
class DataFlow(QMainWindow):
811

912
def __init__(self):
1013
super().__init__()
1114

12-
self.set_dark_theme()
13-
14-
self.setWindowIcon(QIcon('icon.png'))
1515
self.setWindowTitle("DataFlow File Manager")
16+
self.setWindowIcon(QIcon('icon.png'))
1617
self.setGeometry(100, 100, 800, 600)
1718

18-
self.central_widget = QWidget(self)
19-
# u can add custom background image
20-
# self.central_widget.setStyleSheet("background-image: url(./images/bg.jpg);")
19+
self.central_widget = QWidget()
2120
self.setCentralWidget(self.central_widget)
2221

2322
self.current_directory = os.getcwd()
2423

2524
self.dir_label = QLabel(self.current_directory)
26-
self.dir_label.setStyleSheet("color: white;")
25+
self.dir_label.setStyleSheet("color: black;")
2726

2827
self.list_widget = QListWidget()
29-
self.list_widget.setStyleSheet("QListView {background: #292929; border: none; color: white;}")
28+
self.list_widget.setStyleSheet("QListView {background: #333; color: #fff;}")
3029

3130
self.path_input = QLineEdit()
3231
self.path_input.setPlaceholderText("Enter path")
@@ -40,52 +39,30 @@ def __init__(self):
4039
self.central_widget.setLayout(layout)
4140

4241
# Menu actions
43-
self.move_action = QAction("Move", self)
42+
self.move_action = QAction("Move", self)
43+
self.move_action.triggered.connect(self.move_item)
44+
4445
self.copy_action = QAction("Copy", self)
46+
self.copy_action.triggered.connect(self.copy_item)
47+
4548
self.delete_action = QAction("Delete", self)
49+
self.delete_action.triggered.connect(self.delete_item)
50+
4651
self.rename_action = QAction("Rename", self)
47-
48-
self.sort_name_action = QAction("By Name", self)
49-
self.sort_time_action = QAction("By Time", self)
50-
51-
# Sort menu
52-
self.sort_menu = QMenu("Sort", self)
53-
self.sort_menu.addAction(self.sort_name_action)
54-
self.sort_menu.addAction(self.sort_time_action)
52+
self.rename_action.triggered.connect(self.rename_item)
5553

5654
self.sort_action = QAction("Sort", self)
57-
self.sort_action.setMenu(self.sort_menu)
58-
59-
# Menu bar
60-
menu_bar = QMenuBar()
61-
menu_bar.addAction(self.move_action)
62-
menu_bar.addAction(self.copy_action)
63-
menu_bar.addAction(self.delete_action)
64-
menu_bar.addAction(self.rename_action)
65-
menu_bar.addAction(self.sort_action)
66-
self.setMenuBar(menu_bar)
67-
68-
# Connections
69-
self.sort_name_action.triggered.connect(self.sort_by_name)
70-
self.sort_time_action.triggered.connect(self.sort_by_time)
55+
self.sort_action.triggered.connect(self.sort_dialog)
7156

72-
self.refresh_directory()
73-
74-
# Reself.sort_action = QAction("Sort", self)
75-
self.sort_action.setMenu(self.sort_menu)
76-
7757
# Menu bar
7858
menu_bar = QMenuBar()
7959
menu_bar.addAction(self.move_action)
80-
menu_bar.addAction(self.copy_action)
81-
menu_bar.addAction(self.delete_action)
60+
menu_bar.addAction(self.copy_action)
61+
menu_bar.addAction(self.delete_action)
8262
menu_bar.addAction(self.rename_action)
8363
menu_bar.addAction(self.sort_action)
64+
8465
self.setMenuBar(menu_bar)
85-
86-
# Connections
87-
self.sort_name_action.triggered.connect(self.sort_by_name)
88-
self.sort_time_action.triggered.connect(self.sort_by_time)
8966

9067
self.refresh_directory()
9168

@@ -98,31 +75,57 @@ def open_directory(self):
9875
path = self.path_input.text()
9976
if os.path.isdir(path):
10077
self.current_directory = path
101-
self.dir_label.setText("Current Directory: " + self.current_directory)
78+
self.dir_label.setText(self.current_directory)
10279
self.refresh_directory()
10380
else:
10481
QMessageBox.warning(self, "Error", "Invalid directory")
105-
106-
def sort_by_name(self):
107-
self.list_widget.sortItems(Qt.AscendingOrder)
10882

109-
def sort_by_time(self):
110-
items = [(os.path.join(self.current_directory, i.text()), i) for i in self.list_widget.findItems('', Qt.MatchContains)]
111-
items.sort(key=lambda x: os.path.getmtime(x[0]))
112-
self.list_widget.clear()
113-
for item in items:
114-
self.list_widget.addItem(item[1])
115-
116-
def set_dark_theme(self):
117-
dark_palette = QPalette()
118-
dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
119-
dark_palette.setColor(QPalette.WindowText, Qt.white)
120-
dark_palette.setColor(QPalette.Base, QColor(25, 25, 25))
121-
dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
122-
QApplication.setPalette(dark_palette)
123-
83+
def move_item(self):
84+
selected = self.list_widget.selectedItems()[0]
85+
dest_dir = QFileDialog.getExistingDirectory(self, "Select Destination Folder")
86+
if dest_dir:
87+
shutil.move(os.path.join(self.current_directory, selected.text()),
88+
os.path.join(dest_dir, selected.text()))
89+
self.refresh_directory()
90+
91+
def copy_item(self):
92+
selected = self.list_widget.selectedItems()[0]
93+
dest_dir = QFileDialog.getExistingDirectory(self, "Select Destination Folder")
94+
if dest_dir:
95+
shutil.copy(os.path.join(self.current_directory, selected.text()),
96+
os.path.join(dest_dir, selected.text()))
97+
self.refresh_directory()
98+
99+
def delete_item(self):
100+
selected = self.list_widget.selectedItems()[0]
101+
reply = QMessageBox.question(self, "Confirm Deletion",
102+
"Are you sure you want to delete this item?",
103+
QMessageBox.Yes, QMessageBox.No)
104+
105+
if reply == QMessageBox.Yes:
106+
os.remove(os.path.join(self.current_directory, selected.text()))
107+
self.refresh_directory()
108+
109+
def rename_item(self):
110+
selected = self.list_widget.selectedItems()[0]
111+
new_name, ok = QInputDialog.getText(self, "Rename", "New Name:")
112+
if ok:
113+
os.rename(os.path.join(self.current_directory, selected.text()),
114+
os.path.join(self.current_directory, new_name))
115+
self.refresh_directory()
116+
117+
def sort_dialog(self):
118+
items = [self.list_widget.item(i).text() for i in range(self.list_widget.count())]
119+
sort_type, ok = QInputDialog.getItem(self, "Sort", "Sort by:", ["Name", "Time"], 0, False)
120+
if ok:
121+
if sort_type == "Name":
122+
items.sort()
123+
elif sort_type == "Time":
124+
items.sort(key=lambda x: os.path.getmtime(os.path.join(self.current_directory, x)))
125+
self.list_widget.clear()
126+
self.list_widget.addItems(items)
124127
if __name__ == "__main__":
125128
app = QApplication(sys.argv)
126-
window = DataFlow()
129+
window = DataFlow()
127130
window.show()
128-
sys.exit(app.exec())
131+
sys.exit(app.exec())

0 commit comments

Comments
 (0)