PySide2 MenuItem 中的快捷方式阻止 window 显示

The Shortcut in a PySide2 MenuItem prevents window from showing

我正在尝试使用 PySide2(Qt for Windows)和 QML 创建一个非常简单的 ApplicationWindow。

main.py

import sys
from PySide2.QtWidgets import QApplication
from PySide2.QtCore import QUrl
from PySide2.QtQml import QQmlApplicationEngine

if __name__ == "__main__":
    app = QApplication(sys.argv)
    url = QUrl("mainWindow.qml")
    engine = QQmlApplicationEngine()
    engine.load(url)
    sys.exit(app.exec_())

qml 文件

import QtQuick.Controls 2.4

ApplicationWindow {
    id: mainWindow
    visible: true
    title: "MainWindow"
    width: 640
    height: 480

    menuBar: MenuBar {
        id: menuBar

        Menu {
            id: editMenu
            title: "&Edit"

            MenuItem {
                id: copyItem
                text: "Copy"
                // This doesn't work:
                // shortcut: "Ctrl+C"
                // This doesn't work either:
                // shortcut: StandardKey.Copy
            }
        }
    }
}

如图所示,代码运行并显示带有菜单栏和菜单的应用程序窗口。但是,如果我对两个快捷方式变体中的任何一个进行注释, window 根本不会显示。我不明白,为什么。我的示例遵循 Qt documentation on MenuItems.

在 QML 中有 2 种类型的项目:Qt Quick Controls 1Qt Quick Controls 2。两组都有名称相同的项目,但它们的属性不同,在您的情况下,Qt Quick Controls 2MenuItem 没有快捷方式 属性,而是 Qt Quick Controls 1(如果有的话)所以解决方案是更改导入:

import QtQuick 2.11         // <---
import QtQuick.Controls 1.4 // <---

ApplicationWindow {
    id: mainWindow
    visible: true
    title: "MainWindow"
    width: 640
    height: 480

    menuBar: MenuBar {
        id: menuBar
        Menu {
            id: editMenu
            title: "&Edit"

            MenuItem {
                id: copyItem
                text: "Copy"
                shortcut: StandardKey.Copy
                onTriggered: console.log("copy")
            }
        }
    }
}