python - 如何使用 QFileDialog 打开带有 .mid 后缀的文件
问题描述
我为打开文件的选项创建了一个子类。除了 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 最简单的方法是使用静态函数。
这些列在静态成员中,您可能感兴趣getOpenFileName()
;请注意,文件的静态函数(而不是目录的静态函数)总是返回一个元组,包括路径和选定的文件类型过滤器:
def showOpenFileDialog(self):
fileName, filter = QFileDialog.getOpenFileName(self, 'Open file',
'some/default/path/', 'MIDI files (*.mid)')
if fileName:
self.openMidiFile(fileName)
推荐阅读
- flutter - 使用 Flutter 绘制流畅的线条
- ruby-on-rails - 如何使用 postgis 为 rails 应用程序配置 heroku ci?
- python - 如何分组和应用自定义聚合函数来获取熊猫列的模式值?
- android - 什么是在 Android Studio 中的模块 classes.jar 错误中发现的重复类(尝试连接到 Firebase 时)以及如何解决?
- java - 线程问题 - 收件人在发件人之前打印
- python - 如何将用户名显式设置为python请求
- bash - 从 bash 字符串获取(不切割)特定子字符串
- sql-server - 在 MS SQL Server 中实现 geometry_columns 视图
- c# - c#: Datagrid:通过 DataTriggers 更改选择的前景色
- c# - 另一种让鼠标点击的方法?