How I can define the order of the panels?
As a script author you have limited control of panel ordering.


You can change the initial order they show in relation to each other. (for multiple panels you define)
You can't change the order they display in relation to other panels(defined by other scripts for example).
You can't change the order of panels in existing blend files(see workaround below *).




Panels are shown in the order they are registered,

This means if you use bpy.utils.register_module(__name__) the order they're defined.

Since having to re-arrange code just to change panel order is inconvenient. You can register each class explicitly with bpy.utils.register_class(cls), and re-arrange the order of registration this way. See example.



Note that once the panels are saved in a file - their order is saved too. To ignore the saved order you will you will need to load the blend with Load UI disabled.

* You can workaround this and ignore saved panel location in existing files - by renaming the class. (admittedly a kludge).