Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyQT project organization

Tags:

python

pyqt4

I want to organize my PyQT project, I tried to put the UIs in a subfolder and import them like this:

import sys
sys.path.append('UI/gui_sensors')
from gui_sensors_extended import Ui_SensorsWindow_Extended

But it gives me error as it can't find *Ui_SensorsWindow*, the ui-class that was inherited in *Ui_SensorsWindow_Extended*

So, What do you suggest to organize my project? And how can I handle it in the code?

like image 581
M.Nour Avatar asked Oct 21 '25 13:10

M.Nour


1 Answers

There is one key thing to remember when structuring a python project: the directory of the currently running script is automatically added to the start of sys.path.

So if you put your main.py script outside of your package in a top-level container directory, this will guarantee that package imports will always work, no matter where the script is executed from. To illustrate, here is a simple project structure:

project /
    main.py
    package /
        __init__.py
        app.py
        ui /
            __init__.py
            mainwindow.py

The main.py script should be very minimal, and contain only something like this:

if __name__ == '__main__':

    import sys
    from package import app
    sys.exit(app.run())

and within the app module, the gui modules would be imported like this:

from package.ui.mainwindow import Ui_MainWindow

This same import syntax can be used anywhere within the package tree. So if you added another sub-package like this:

project /
    main.py
    package /
    ...
        dialogs /
            __init__.py
            search.py

then the search module would import its gui module like this:

from package.ui.search import Ui_SearchDialog

If you organize all your python projects in this way, there should never be any need to manipulate sys.path in order to get your local imports working correctly.

like image 158
ekhumoro Avatar answered Oct 23 '25 02:10

ekhumoro



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!