繁体   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