Mein MP3 Player sortiert aber nach dem MP3 Tag Titel...
Mein Programm übernimmt nun den Dateinamen, setzt auf Wunsch eine Nummer davor und setzt ihn als MP3 Tag.
Das ganze hab ich mit PyQt, eyed3 und Python 2.7 geschrieben.
Hier das Hauptprogramm ohne PyQt Gui. Wenn jemand das Programm testen möchte: http://www.mediafire.com/download/ixaqc ... Tagger.zip
Code: Alles auswählen
import sys
import os
import eyed3
from PyQt4 import QtGui, QtCore
from MP3_Tag_GUI import Ui_MainWindow as Dlg#Hauptwindow
from about_dialog import Ui_Dialog as AboutDlg#Aboutwindow
from subfolder_dialog import Ui_Form as SubfolderDlg
class MainWindow(QtGui.QMainWindow, Dlg):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setupUi(self)
#Setzt alle Textfelder auf read-only
self.title_text.setReadOnly(True)
self.interpreten_text.setReadOnly(True)
self.albuminterpreten_text.setReadOnly(True)
#Verbindet alle Checkboxen, Buttons, Menubar-Actions mit Funktionen
self.connect(self.title_checkBox,
QtCore.SIGNAL("clicked()"), self.onTitle_checkBox)
self.connect(self.interpreten_checkBox,
QtCore.SIGNAL("clicked()"), self.onInterpreten_checkBox)
self.connect(self.albuminterpreten_checkBox,
QtCore.SIGNAL("clicked()"), self.onAlbuminterpreten_checkBox)
self.connect(self.start_button,
QtCore.SIGNAL("clicked()"), self.onStart_button)
self.connect(self.reset_button,
QtCore.SIGNAL("clicked()"), self.onReset_button)
self.connect(self.actionBeenden,
QtCore.SIGNAL("triggered()"), self.onActionBeenden)
self.connect(self.actionAbout,
QtCore.SIGNAL("triggered()"), self.onActionAbout)
self.connect(self.actionSubfolder,
QtCore.SIGNAL("triggered()"), self.onActionSubfolder)
def onTitle_checkBox(self):
if self.title_checkBox.checkState():
self.title_text.setReadOnly(False)
else:
self.title_text.setReadOnly(True)
def onInterpreten_checkBox(self):
if self.interpreten_checkBox.checkState():
self.interpreten_text.setReadOnly(False)
else:
self.interpreten_text.setReadOnly(True)
def onAlbuminterpreten_checkBox(self):
if self.albuminterpreten_checkBox.checkState():
self.albuminterpreten_text.setReadOnly(False)
else:
self.albuminterpreten_text.setReadOnly(True)
def onStart_button(self):
folder_path = self.path_text.toPlainText()
folder_path = unicode(folder_path)
folder_path = folder_path.split("\n")
title = self.title_text.toPlainText()
interpreten = self.interpreten_text.toPlainText()
albuminterpreten = self.albuminterpreten_text.toPlainText()
progressBar_value = 0
album_count = 1
failure = []
for path in folder_path:
percent_per_path = round(100 / len(folder_path))
try:
file_list = os.listdir(path)
except EnvironmentError:
messagebox = MessageBox("Fehler", "Es wurde ein ungueltiger Pfad angegeben" + "\n" + path, 2)
messagebox.show()
count = 1
for file in file_list:
percent_per_file = round(percent_per_path/len(file_list))
progressBar_value += percent_per_file
self.progressBar.setValue(progressBar_value)
path_neu = os.path.join(path, file)
try:
audiofile = eyed3.load(path_neu)
audiofile.tag#Testet, ob es eine MP3 ist, da Dateien ohne Dateiendung einfach so geladen werden.
except (IOError, AttributeError):
failure.append(file)
continue
if title == "filename":
audiofile.tag.title = u"" + str(count)+ " " + file
elif title == "filename /e":
audiofile.tag.title = u"" + file
else:
audiofile.tag.title = u"" + str(count) + " " + unicode(title)
audiofile.tag.artist = u"" + unicode(interpreten)
try:
if albuminterpreten[-2] + albuminterpreten[-1] == "/e":
albuminterpreten2 = albuminterpreten[:-3]
audiofile.tag.album = u"" + unicode(albuminterpreten2)
else:
audiofile.tag.album = u"" + unicode(albuminterpreten) + " " + str(album_count)
except IndexError:
continue
audiofile.tag.save()
album_count += 1
self.progressBar.setValue(100)
if len(failure) != 0:
self.messageBox = MessageBox("Fehler", "Es konnten nicht alle Dateien umgetaggt werden. Vielleicht befinden sich auch nicht MP3s im Orndner. Diese wurden uebersprungen.", 2)
self.messageBox.show()
self.path_text.clear()
for fail in failure:
self.path_text.insertPlainText(fail+"\n")
else:
self.messageBox = MessageBox("Erflogreich", "Es wurden alle angegeben MP3s umgetagt.", 1)
self.messageBox.show()
def onReset_button(self):
self.path_text.clear()
self.title_text.clear()
self.interpreten_text.clear()
self.albuminterpreten_text.clear()
self.title_checkBox.setCheckState(QtCore.Qt.Unchecked)
self.interpreten_checkBox.setCheckState(QtCore.Qt.Unchecked)
self.albuminterpreten_checkBox.setCheckState(QtCore.Qt.Unchecked)
self.progressBar.setValue(0)
def onActionBeenden(self):
sys.exit(app.exec_())
def onActionAbout(self):
self.dialog = AboutDialog()
self.dialog.exec_()
def onActionSubfolder(self):
self.dialog = SubfolderDialog()
self.dialog.exec_()
class AboutDialog(QtGui.QDialog, AboutDlg):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
self.connect(self.ok_button,
QtCore.SIGNAL("clicked()"), self.onOk_button)
def onOk_button(self):
self.close()
class MessageBox(QtGui.QMessageBox):
def __init__(self, title, text, flag, parent=None):
QtGui.QMessageBox.__init__(self, parent)
self.setGeometry(300, 300, 250, 150)
self.setWindowTitle(title)
self.setText(text)
self.setIcon(flag)
class SubfolderDialog(QtGui.QDialog, SubfolderDlg):
def __init__(self):
QtGui.QDialog.__init__(self)
self.setupUi(self)
self.connect(self.start_button,
QtCore.SIGNAL("clicked()"), self.onStart_button)
self.connect(self.reset_button,
QtCore.SIGNAL("clicked()"), self.onReset_button)
self.subpath_text.setReadOnly(True)
def onStart_button(self):
path = unicode(self.path_text.toPlainText())
subpath = os.listdir(path)
for folder in subpath:
new_path = os.path.join(path, folder)
if os.path.isfile(new_path):
pass
else:
self.subpath_text.insertPlainText(new_path + "\n")
def onReset_button(self):
self.path_text.clear()
self.subpath_text.clear()
app = QtGui.QApplication(sys.argv)
app.setStyle(QtGui.QStyleFactory.create("plastique"))
window = MainWindow()
window.show()
sys.exit(app.exec_())
Nooby