Skip to content

Commit c325f60

Browse files
authored
Merge branch 'master' into fix_bs4
2 parents 5848fb4 + 0f39387 commit c325f60

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+2289
-2
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# RP Renamer
2+
3+
**RP Renamer** is a bulk file rename tool built with Python and [PyQt5](https://www.riverbankcomputing.com/static/Docs/PyQt5/index.html).
4+
5+
## Running the Application
6+
7+
To run **RP Renamer**, you need to download the source code. Then open a terminal or command-line window and run the following steps:
8+
9+
1. Create and activate a Python virtual environment.
10+
11+
```sh
12+
$ cd rprename_project/
13+
$ python3 -m venv ./venv
14+
$ source venv/bin/activate
15+
(venv) $
16+
```
17+
18+
2. Install the dependencies.
19+
20+
```sh
21+
(venv) $ pip install -r requirements.txt
22+
```
23+
24+
3. Run the application.
25+
26+
```sh
27+
(venv) $ python3 rprenamer.py
28+
```
29+
30+
**Note:** This application was coded and tested with Python 3.8.5 and PyQt 5.15.2.
31+
32+
## Release History
33+
34+
- 0.1.0
35+
- A work in progress
36+
37+
## About the Author
38+
39+
Leodanis Pozo Ramos – [@lpozo78](https://twitter.com/lpozo78)[email protected]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# RP Renamer
2+
3+
**RP Renamer** is a bulk file rename tool built with Python and [PyQt5](https://www.riverbankcomputing.com/static/Docs/PyQt5/index.html).
4+
5+
## Running the Application
6+
7+
To run **RP Renamer**, you need to download the source code. Then open a terminal or command-line window and run the following steps:
8+
9+
1. Create and activate a Python virtual environment.
10+
11+
```sh
12+
$ cd rprename_project/
13+
$ python3 -m venv ./venv
14+
$ source venv/bin/activate
15+
(venv) $
16+
```
17+
18+
2. Install the dependencies.
19+
20+
```sh
21+
(venv) $ pip install -r requirements.txt
22+
```
23+
24+
3. Run the application.
25+
26+
```sh
27+
(venv) $ python3 rprenamer.py
28+
```
29+
30+
**Note:** This application was coded and tested with Python 3.8.5 and PyQt 5.15.2.
31+
32+
## Release History
33+
34+
- 0.1.0
35+
- A work in progress
36+
37+
## About the Author
38+
39+
Leodanis Pozo Ramos – [@lpozo78](https://twitter.com/lpozo78)[email protected]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
PyQt5==5.15.2
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""This module provides the RP Renamer main window."""
4+
5+
__version__ = "0.1.0"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""This module provides the RP Renamer application."""
4+
5+
import sys
6+
7+
from PyQt5.QtWidgets import QApplication
8+
9+
from .views import Window
10+
11+
12+
def main():
13+
# Create the application
14+
app = QApplication(sys.argv)
15+
# Create and show the main window
16+
win = Window()
17+
win.show()
18+
# Run the event loop
19+
sys.exit(app.exec())
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""This module provides the Renamer class to rename multiple files."""
4+
5+
import time
6+
from pathlib import Path
7+
8+
from PyQt5.QtCore import QObject, pyqtSignal
9+
10+
11+
class Renamer(QObject):
12+
# Define custom signals
13+
progressed = pyqtSignal(int)
14+
renamedFile = pyqtSignal(Path)
15+
finished = pyqtSignal()
16+
17+
def __init__(self, files, prefix):
18+
super().__init__()
19+
self._files = files
20+
self._prefix = prefix
21+
22+
def renameFiles(self):
23+
for fileNumber, file in enumerate(self._files, 1):
24+
newFile = file.parent.joinpath(
25+
f"{self._prefix}{str(fileNumber)}{file.suffix}"
26+
)
27+
file.rename(newFile)
28+
time.sleep(0.1) # Comment this line to rename files faster.
29+
self.progressed.emit(fileNumber)
30+
self.renamedFile.emit(newFile)
31+
self.progressed.emit(0) # Reset the progress
32+
self.finished.emit()
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""This module provides the RP Renamer GUI."""
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file 'window.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.14.1
6+
#
7+
# WARNING! All changes made in this file will be lost!
8+
9+
10+
from PyQt5 import QtCore, QtGui, QtWidgets
11+
12+
13+
class Ui_Window(object):
14+
def setupUi(self, Window):
15+
Window.setObjectName("Window")
16+
Window.resize(720, 480)
17+
self.gridLayout = QtWidgets.QGridLayout(Window)
18+
self.gridLayout.setObjectName("gridLayout")
19+
self.label = QtWidgets.QLabel(Window)
20+
self.label.setMinimumSize(QtCore.QSize(0, 15))
21+
self.label.setMaximumSize(QtCore.QSize(16777215, 15))
22+
self.label.setObjectName("label")
23+
self.gridLayout.addWidget(self.label, 0, 0, 1, 3)
24+
self.dirEdit = QtWidgets.QLineEdit(Window)
25+
self.dirEdit.setMinimumSize(QtCore.QSize(0, 30))
26+
self.dirEdit.setMaximumSize(QtCore.QSize(16777215, 30))
27+
self.dirEdit.setReadOnly(True)
28+
self.dirEdit.setObjectName("dirEdit")
29+
self.gridLayout.addWidget(self.dirEdit, 1, 0, 1, 2)
30+
self.loadFilesButton = QtWidgets.QPushButton(Window)
31+
self.loadFilesButton.setMinimumSize(QtCore.QSize(0, 30))
32+
self.loadFilesButton.setMaximumSize(QtCore.QSize(16777215, 30))
33+
self.loadFilesButton.setObjectName("loadFilesButton")
34+
self.gridLayout.addWidget(self.loadFilesButton, 1, 2, 1, 1)
35+
self.splitter = QtWidgets.QSplitter(Window)
36+
self.splitter.setOrientation(QtCore.Qt.Horizontal)
37+
self.splitter.setObjectName("splitter")
38+
self.layoutWidget = QtWidgets.QWidget(self.splitter)
39+
self.layoutWidget.setObjectName("layoutWidget")
40+
self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
41+
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
42+
self.verticalLayout.setObjectName("verticalLayout")
43+
self.label_2 = QtWidgets.QLabel(self.layoutWidget)
44+
font = QtGui.QFont()
45+
font.setBold(True)
46+
font.setWeight(75)
47+
self.label_2.setFont(font)
48+
self.label_2.setObjectName("label_2")
49+
self.verticalLayout.addWidget(self.label_2)
50+
self.srcFileList = QtWidgets.QListWidget(self.layoutWidget)
51+
self.srcFileList.setObjectName("srcFileList")
52+
self.verticalLayout.addWidget(self.srcFileList)
53+
self.layoutWidget1 = QtWidgets.QWidget(self.splitter)
54+
self.layoutWidget1.setObjectName("layoutWidget1")
55+
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget1)
56+
self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
57+
self.verticalLayout_2.setObjectName("verticalLayout_2")
58+
self.label_3 = QtWidgets.QLabel(self.layoutWidget1)
59+
font = QtGui.QFont()
60+
font.setBold(True)
61+
font.setWeight(75)
62+
self.label_3.setFont(font)
63+
self.label_3.setObjectName("label_3")
64+
self.verticalLayout_2.addWidget(self.label_3)
65+
self.dstFileList = QtWidgets.QListWidget(self.layoutWidget1)
66+
self.dstFileList.setObjectName("dstFileList")
67+
self.verticalLayout_2.addWidget(self.dstFileList)
68+
self.gridLayout.addWidget(self.splitter, 2, 0, 1, 3)
69+
self.label_4 = QtWidgets.QLabel(Window)
70+
self.label_4.setMinimumSize(QtCore.QSize(0, 15))
71+
self.label_4.setMaximumSize(QtCore.QSize(16777215, 15))
72+
self.label_4.setObjectName("label_4")
73+
self.gridLayout.addWidget(self.label_4, 3, 0, 1, 3)
74+
self.prefixEdit = QtWidgets.QLineEdit(Window)
75+
self.prefixEdit.setMinimumSize(QtCore.QSize(0, 30))
76+
self.prefixEdit.setMaximumSize(QtCore.QSize(16777215, 30))
77+
self.prefixEdit.setObjectName("prefixEdit")
78+
self.gridLayout.addWidget(self.prefixEdit, 4, 0, 1, 1)
79+
self.extensionLabel = QtWidgets.QLabel(Window)
80+
self.extensionLabel.setMinimumSize(QtCore.QSize(0, 30))
81+
self.extensionLabel.setMaximumSize(QtCore.QSize(16777215, 30))
82+
self.extensionLabel.setObjectName("extensionLabel")
83+
self.gridLayout.addWidget(self.extensionLabel, 4, 1, 1, 1)
84+
self.renameFilesButton = QtWidgets.QPushButton(Window)
85+
self.renameFilesButton.setMinimumSize(QtCore.QSize(0, 30))
86+
self.renameFilesButton.setMaximumSize(QtCore.QSize(16777215, 30))
87+
self.renameFilesButton.setObjectName("renameFilesButton")
88+
self.gridLayout.addWidget(self.renameFilesButton, 4, 2, 1, 1)
89+
self.progressBar = QtWidgets.QProgressBar(Window)
90+
self.progressBar.setProperty("value", 0)
91+
self.progressBar.setObjectName("progressBar")
92+
self.gridLayout.addWidget(self.progressBar, 5, 0, 1, 3)
93+
94+
self.retranslateUi(Window)
95+
QtCore.QMetaObject.connectSlotsByName(Window)
96+
97+
def retranslateUi(self, Window):
98+
_translate = QtCore.QCoreApplication.translate
99+
Window.setWindowTitle(_translate("Window", "RP Renamer"))
100+
self.label.setText(_translate("Window", "Last Source Directory:"))
101+
self.loadFilesButton.setText(_translate("Window", "&Load Files"))
102+
self.label_2.setText(_translate("Window", "Files to Rename"))
103+
self.label_3.setText(_translate("Window", "Renamed Files"))
104+
self.label_4.setText(_translate("Window", "Filename Prefix:"))
105+
self.prefixEdit.setPlaceholderText(
106+
_translate("Window", "Rename your files to...")
107+
)
108+
self.extensionLabel.setText(_translate("Window", "*.jpg"))
109+
self.renameFilesButton.setText(_translate("Window", "&Rename"))

0 commit comments

Comments
 (0)