我对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,所以想了解如何解决此问题并继续在Qt中使用PyCharm。 如果重要的话-我正在运行ArchLinux。