PyQt5在文件对话框中启用“全选”(Ctrl / Cmd + A)

时间:2019-04-18 09:35:52

标签: python pyqt5 qfiledialog

对于像这样的简单文件对话框:

from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)
OpenFile = QFileDialog()
filenames = OpenFile.getOpenFileNames()
print(filenames)

Shift-select可以选择多个项目,但Ctrl / Cmd + A则不能。这是OS,还是应该在PyQt5中以某种方式启用?


编辑:它不起作用的原因是因为: https://bugreports.qt.io/browse/QTBUG-17291

Qt需要带有键盘快捷键的菜单栏,而QFileDialog没有菜单栏,因此缺少诸如“全选”之类的快捷键。

1 个答案:

答案 0 :(得分:0)

基于以上文章中的错误报告,我发现只需在MacOS的菜单栏中添加一个虚拟的“全选”命令即可使用快捷方式。

如果使用.ui文件,只需通过Qt Creator通过⌘A Select All 添加到 Edit

from PyQt5.QtWidgets import *
import sys

class Example(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.initMenuBar()

    def initUI(self):
        self.show()

    def initMenuBar(self):
        menubar = self.menuBar()

        fileMenu = menubar.addMenu("&File")
        editMenu = menubar.addMenu("&Edit")

        actionOpen = QAction("Open", self)
        actionOpen.triggered.connect(self.openFiles)
        actionOpen.setShortcut("Ctrl+O")
        fileMenu.addAction(actionOpen)

        actionSelectAll = QAction("Select All", self)
        actionSelectAll.setShortcut("Ctrl+A")
        editMenu.addAction(actionSelectAll)

    def openFiles(self):
        filenames = QFileDialog.getOpenFileNames()
        print(filenames)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())