Попытка создать редактор ID3-тегов.Ошибка типа: отсутствует аргумент имя файла или аргумент fileobj - PullRequest
0 голосов
/ 30 мая 2018

Я создаю тегедитор, который отображает ID3-теги mp3-файла в стиле «до» и «после» в различных текстовых строках.Если нет доступных тегов, ничего не отображается.Вы также можете редактировать текстовые строки "after", и любые сделанные в них изменения должны быть сохранены в файл, но когда я нажимаю кнопку2, я получаю нижнюю трассировку.Как я могу сохранить строки 6-10 как новые "audio [" title "], audio [" artist "]" и т. Д.? Это графический интерфейс пользователя

import sys
import easygui
import mutagen
from mutagen.easyid3 import EasyID3
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QApplication, QDialog
from PyQt5.uic import loadUi
from PyQt5.QtWidgets import QLineEdit
lied = None
error = "No ID3-Tag available."
class TrackTag1(QDialog):
    def __init__(self):
        super(TrackTag1,self).__init__()
        loadUi("TrackTag1.ui",self)
        self.setWindowTitle("TrackTag")

@pyqtSlot()
def on_button1_clicked(self):
    #root.fileName = filedialog.askopenfilename( filetypes = ( ("Musik Dateien", "*.mp3"), ("Alle Dateien", "*.*") ) )
    #print(easygui.fileopenbox('MP3 Dateien','', '*.MP3'))
    lied = easygui.fileopenbox('MP3 Dateien','', '*.MP3')
    audio = EasyID3(lied)
    self.line0.setText(lied)                    #printing filepath to line0
    try:
        self.line1.setText(str(audio["title"]).strip("[']"))        #printing the ID3 tags after they've been stripped of "['']"
        self.line6.setText(str(audio["title"]).strip("[']"))
    except:
        KeyError
        self.line1.setText(error)
    try:
        self.line2.setText(str(audio["album"]).strip("[']"))
        self.line7.setText(str(audio["album"]).strip("[']"))
    except:
        KeyError
        self.line2.setText(error)
    try:
        self.line3.setText(str(audio["date"]).strip("[']"))
        self.line8.setText(str(audio["date"]).strip("[']"))
    except:
        KeyError
        self.line3.setText(error)
    try:
        self.line4.setText(str(audio["artist"]).strip("[']"))
        self.line9.setText(str(audio["artist"]).strip("[']"))
    except:
        KeyError
        self.line4.setText(error)
    try:
        self.line5.setText(str(audio["genre"]).strip("[']"))
        self.line10.setText(str(audio["genre"]).strip("[']"))
    except:
        KeyError
        self.line5.setText(error)

def on_button2_clicked(self):
    audio = EasyID3(lied)
    audio["title"] = self.line6.text()
    audio.save()



app=QApplication(sys.argv)
widget=TrackTag1()
widget.show()
sys.exit(app.exec_())




app=QApplication(sys.argv)
widget=TrackTag1()
widget.show()
sys.exit(app.exec_())

Когда я нажимаю кнопку сохранения изменений, я получаю эту трассировку:

Traceback (most recent call last):
  File "<string>", line 69, in on_button2_clicked
  File "h:\program files (x86)\python\lib\site-packages\mutagen\_util.py",     line 139, in wrapper
    writable, create) as h:
  File "h:\program files (x86)\python\lib\contextlib.py", line 59, in     __enter__
    return next(self.gen)
  File "h:\program files (x86)\python\lib\site-packages\mutagen\_util.py",     line 270, in _openfile
    raise TypeError("Missing filename or fileobj argument")
TypeError: Missing filename or fileobj argument

Пока вы можете толькоотредактировать теги, но я планирую вскоре выполнить запрос MusicBrainz.

1 Ответ

0 голосов
/ 30 мая 2018

В методе on_button2_clicked обманутый объект в основном отсутствует.Чтобы получить правильное, используйте ключевое слово global при назначении его в on_button1_clicked.(Что на самом деле вам никогда не следует! Вместо этого создайте атрибут для его хранения и доступа к нему с помощью self.lied или чего-то подобного)

Кроме того, я предполагаю, что эти две функции являются фактическими методами класса из-за ключевого слова self иВы просто неправильно сделали отступ при копировании.

В основном ошибка из-за областей.

...