On a conceptual level, they go together very well. I've written a python/qml/js/opengl program that combines everything fairly nicely. That was with Qt4.7 and PySide.
If you're just using QML, you can minimise the amount of Qt you'll need to be exposed to (though, as always, more knowledge makes you more powerful). Essentially, once you have a qdeclarativeview, your Qt work is done apart from the signal/slot handling, which is a joy under PySide. I would suggest that you can be productive quickly using Python and QML without worrying too much about the Qt side of things, picking it up as necessary.
From experience, I suggest making the demarcation between Python and QML clear in your own mind. I restricted the QML very much to GUI logic, which is does very well; in effect the QML handles how the interface responds to inputs, and then it sends signals back to the main program. It works a bit like creating a very basic, pared down interface between the GUI and the rest of the program, only signalling high level logic (rather than, for example, sending back a click, it would send back a signal saying for example "turn on the processing", the GUI would deal with how to render that change). In my case, this just plugged straight into my MVC framework, but you can do it how you like.
There is one big fat caveat though in all this. The development of PySide has rather stalled and currently doesn't support Qt5 and all its QML improvement goodness. There have been various discussions about how it should be supported, but not much actual code committed.
I believe PyQt supports Qt5, but dual licensed as either GPL or commercial (PySide is LGPL so can be used with closed source code). I have no experience of PyQt, other than it, and PySide being approximately drop in replacements for one-another.
It seems like I'm talking about using it as a MVVM.
(any limitations question): The whole of Qt is exposed through PySide and PyQt. This means you can write extensions in Python as you would in C. I wrote a widget that captured mouse scroll events so I could steal the scroll from a Flickable. This was a QML element created in Python, though I also had to load it from Python; I couldn't quite work out how to create an extension that I could load from inside the QML document. It's possible of course to write a C extension which is standalone to your main code, so you still always have that option.
Edit: PySide2 is now a thing and supports Qt5.
Edit2: As of 2021, Pyside is now known as QT For Python , and is very much supported up to and including QT6. Make sure you keep a note of the license.
Best Answer
QML is the name of the language (just like C++, which is another language...)
QtQuick is a toolkit for QML, allowing to develop graphical interface in QML language (there are other toolkits for QML, some are graphical like Sailfish Silica or BlackBerry Cascade, and some are non-graphical like QBS which is a replacement for QMake/CMake/make...)
QtQuick 1.x was Qt4.x-based and used the
QPainter
/QGraphicsView
API to draw the scene. QtQuick 2.X was introduced with Qt5.0, based on Scene Graph, an OpenGLES2 abstraction layer, highly optimized.With Qt5.1, Scene Graph was enhanced to use multithreading (QtQuick 2.1) With Qt5.2, Scene Graph is yet a lot more optimized to reduce CPU/GPU calls and memory usage
QML engine was based on JsCore (JS engine of Webkit) in Qt4.x and was rebased on V8 (JS engine of Google Chrome) with 5.0 but this disallows to use it on mobiles and especially on iOS, so Qt5.2 introduced a new QML engine, named V4VM, created by/for Qt guys.
There are also the QtQuick Controls, which is basically a set of native-looking widgets, based on QtQuick. It was originally meant for desktop, but Qt 5.4 introduced a native L&F for Android, based on the holo theme. A material theme, as well as an iOS theme, are in development but not available as of current Qt release (5.5). Some controls were Enterprise only, but in Qt5.5 they got renamed as Extras, and they are now available for all licenses. Another development is undergoing, named QtQuickControls 2, which is a full rewrite of Controls, to gain better performance, aimed for light embedded UIs, it should at Tech Preview stage in Qt 5.6.
From Qt5.5, there is a new module named QtQuick3D, which gives ability to create 3D apps/games using QML language. It doesn't use SceneGraph which is too 2D/2.4D oriented. A new engine is named FrameGraph for this use.
If you develop modern apps you should use Qt5.x + QML 2.x + QtQuick 2.x, to touch the most vast userbase possible.
With Qt, in general, always follow the updates because they add more features, more perfomances and more platforms.