Как использовать QFileDialog для открытия файла с суффиксом .mid

#python #pyqt5 #file-extension #qfiledialog #mido

#python #pyqt5 #расширение файла #qfiledialog #mido

Вопрос:

Я создал подкласс для опции открытия файла. Наряду с PYQT5 я импортировал библиотеку python Mido amp; py-midi для чтения MIDI-файлов. Если моя логика верна. Я буду использовать FileDialog PYQT5 для извлечения файла, присвоения его переменной, а затем использовать Mido для чтения указанного MIDI-файла, после чего я буду использовать py-midi для редактирования этих файлов

 class OpenDialog(QFileDialog):

    def __init__(self, *args, **kwargs):
        super(OpenDialog, self).__init__(*args, **kwargs)

        self.setWindowTitle("Open")
        self.setFixedSize(1000, 450)

        buttons = QDialogButtonBox.Open | QDialogButtonBox.Cancel

        self.buttonBox = QDialogButtonBox(buttons)
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)

        self.layout = QVBoxLayout()
        self.layout.addWidget(self.buttonBox)
        self.setLayout(self.layout)

        # OpenedFile =
 

Я закомментировал OpenedFile, потому что планирую использовать это как переменную для ссылки на открытые файлы. Однако я не уверен, как это можно сделать в PYQ5. Кроме того, как это сделать с определенным расширением файла.

Комментарии:

1. Ваш вопрос неясен, не могли бы вы объяснить мне лучше

Ответ №1:

Я полагаю, вы немного сбиты с толку тем, как работает QFileDialog.

Прежде всего, по умолчанию Qt пытается использовать собственное диалоговое окно файла, предоставляемое системой, поэтому, как правило, вы не должны пытаться создавать свои собственные с помощью подклассов, если только вам не нужно особое поведение.

Затем QFileDialog — это QDialog, который уже имеет свой собственный (частный) макет и виджеты, включая область, в которой отображаются файлы и папки, текстовое поле для пути и стандартные кнопки открытия / отмены.

Поскольку вам нужно только открыть файл определенного типа, нет абсолютно никакой необходимости в подклассах, как объяснено в самом начале документации:

Самый простой способ создать QFileDialog — использовать статические функции.

Они перечислены в статических элементах, и вы, вероятно, заинтересованы в getOpenFileName() ; обратите внимание, что статические функции для файлов (не для каталогов) всегда возвращают кортеж, включающий пути и выбранный фильтр типов файлов:

     def showOpenFileDialog(self):
        fileName, filter = QFileDialog.getOpenFileName(self, 'Open file', 
            'some/default/path/', 'MIDI files (*.mid)')
        if fileName:
            self.openMidiFile(fileName)