1

我对 Python 控制台应用程序有一些经验,现在尝试从 Qt for Python(Qt 5.12,PySide2)开始。实际上,我正在尝试一些基本教程来了解它应该如何工作。

所以,我创建了非常简单的view.qml

import QtQuick 2.0
import QtQuick.Controls 2.13

ApplicationWindow {
    visible: true

    Button {
        id: button
        text: qsTr("ClickOnMe")
    }

    Connections {
        target: button
        onClicked: con.say_hello()
    }
}

并有以下 python 代码使用它:

from PySide2.QtCore import QObject, Slot
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine

class Bridge(QObject):
    @Slot()
    def say_hello(context):
        print("Button clicked, Hello!", context)

app = QGuiApplication([])
engine = QQmlApplicationEngine()
bridge = Bridge()

context = engine.rootContext()
context.setContextProperty("con", bridge)
engine.load("view.qml")

engine.rootObjects()
exit(app.exec_())

当我简单地运行它时它工作正常 - 即我看到一个带有按钮的应用程序窗口。我可以单击一个按钮并查看控制台中打印的消息。但是当我尝试调试它时 - 它立即停止在线class Bridge(QObject):并出现以下异常: <class 'tuple'>: (<class 'TypeError'>, TypeError("'Shiboken.ObjectType' object is not iterable"), <traceback object at 0x7fe195b23680>)

我在 Qt Creator 中尝试了同样的方法 - 工作正常,运行和调试没有问题(小问题 - Qt Creator 控制台中的消息仅在应用程序终止后出现)。但我更喜欢 PyCharm,所以想了解如何解决这个问题并继续将 PyCharm 与 Qt 一起使用。如果它很重要——我正在运行 ArchLinux。

4

2 回答 2

2

几天前,Arch Linux 将其 Python 版本更新为 3.8,但 PySide2 还没有兼容版本,导致您指出的错误。正如他们在本报告PYSIDE-1140中指出的那样:

我保持这个开放,但它可能会在 5.14 中得到解决,从那时起 Python 3.8 将作为新的兼容 Python 版本引入。

所以你有2个选择:

  • 等待与 Python3.8 兼容的 PySide2 版本。

  • 或者从 aur 安装Python3.7旧版本(使用 yay),然后使用 pip 安装 PySide2。

于 2019-11-17T19:55:05.470 回答
1

这实际上是使用 Python 3.8 的 Qt for Python 中的一个错误,但是这里已经解决

只需更新您的 qt:

pip install PyQt5
于 2019-12-20T14:22:06.657 回答