在概念层面上,他们一起走好。我写了一个python / qml / js / opengl程序,结合了一切相当不错。那是与Qt4.7和PySide。
如果您只是使用QML,则可以将您需要暴露的Qt的数量最小化(尽管如此,一如以往,更多知识将使您更加强大)。基本上,一旦你有一个qdeclarativeview,你的Qt工作是完全不同于信号/插槽处理,这是PySide的一个喜悦。我建议您可以快速使用Python和QML,而不用担心Qt方面的问题,必要时可以选择它。
从经验来看,我建议您在自己的头脑中将Python和QML之间的界限清晰化。我限制了QML非常好的gui逻辑,这是非常好的;实际上,QML处理接口如何响应输入,然后将信号发送回主程序。它有点像在gui和程序的其余部分之间创建一个非常基本的,削减的接口,只表示高级逻辑(而不是例如发回一个点击,它会发回一个信号,例如“打开处理“,gui会处理如何呈现这种变化)。在我的情况下,这只是直接插入到我的MVC框架,但你可以做你喜欢的。
所有这一切都有一个大的脂肪警告。 PySide的发展已经停滞不前,目前不支持Qt5和QML的所有改进。已经有了关于如何支持的讨论,但实际的代码不是很多。
我相信PyQt支持Qt5,但双重许可为GPL或商业(PySide是LGPL,因此可以使用封闭的源代码)。我没有PyQt的经验,除了PySide,PySide大概被替换为另一个。
编辑:看来我正在谈论将其用作MVVM。
编辑(任何限制问题):整个Qt通过PySide和PyQt暴露。这意味着您可以像在C中一样在Python中编写扩展名。我写了一个捕获鼠标滚动事件的小部件,以便我可以从Flickable中窃取滚动条。这是在Python中创建的QML元素,尽管我也必须从Python加载它;我无法完成如何创建一个可从QML文档内部加载的扩展名。当然可以编写一个独立于您的主要代码的C扩展,因此您仍然始终拥有该选项。