簡體   English   中英

如何使用QFileDialog打開.mid后綴的文件

[英]How to use QFileDialog to open file with .mid suffix

我為打開文件的選項創建了一個子類。 除了 PYQT5,我還導入了 python 庫 Mido & py-midi 以讀取 MIDI 文件。 如果我的邏輯是正確的。 我將使用 PYQT5 的 FileDialog 來檢索文件,將其分配給變量,然后使用 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 中完成此操作。 此外,如何使用特定的文件擴展名執行此操作。

我相信您對 QFileDialog 的工作方式有些困惑。

首先,默認情況下 Qt 嘗試使用系統提供的本機文件對話框,因此通常您不應該嘗試通過子類化來創建自己的文件,除非您需要非常特殊的行為。

然后,QFileDialog 是一個 QDialog,它已經有自己的(私有)布局和小部件,包括顯示文件和文件夾的區域、路徑的文本字段和標准的打開/取消按鈕。

由於您只需要打開特定的文件類型,因此絕對不需要子類化,如文檔開頭所述:

創建 QFileDialog 的最簡單方法是使用 static 函數。

這些列在static 成員中,您可能對getOpenFileName()感興趣; 請注意,文件(不是目錄)的 static 函數總是返回一個元組,包括路徑和選定的文件類型過濾器:

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

嘗試以下腳本:

class FileDialog(QtWidgets.QFileDialog):

    def __init__(self, *args, **kwargs):
        super(FileDialog, self).__init__(*args, **kwargs)
        self.setOption(QFileDialog.DontUseNativeDialog, True)
        self.setNameFilters(["Excel File (*.xlsx *.xls)","CSV File (*.csv)","Log File (*.log)"])
        self.setFileMode(QFileDialog.ExistingFiles)

    def accept(self):
        super(FileDialog, self).accept()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM