我对 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。