Enterprise wxPython?

Hello ! I work in a small company (about 100 people) and have been using Lazarus until now. I want to start learning wxPython to produce desktop application to use internally. I’m interested in your feedback if you are in the same situation : is it working well, are your users happy, is it easy to maintain ? Are the applications running fast ? How do you deploy your applications ? I intend using PyInstaller to make standalone exe files, that’s what seems the easiest for me, but I noticed that a simple “hello world” is already 13mb and is a bit slow to start (only a few seconds)… Do you think it’s acceptable in my situation ? I am very excited and look forward to your feedback!!!
Thanks

I’m also working at a large company, but our department is smaller, so the actual number of users for my work-related GUI programs is around 10 to 15.
I have several GUI programs for measurement and data analysis and also some command line programs for measurement. (Besides report scripts and an intranet server.)

I evaluated wxPython, PyQt, Tkinter and gtk in 1999 and went for wxPython. The license is a huge advantage. I don’t know what I would be allowed to do with Qt. Most people don’t care about this, though. The other two toolkits were ruled out based on look & feel and architecture and poor Windows support.
The nice thing about wx is that you have useful GUI builders. I prefer wxGlade, for obvious reasons, even though my main GUI application pre-dates my wxGlade development and usage. (I don’t consider Qt Designer very useful for Python.)
wx development is not too fast and they support ‘only’ the desktop. Qt has mobile support and fancy touch UIs with QML, but more or less dropped desktop development.
With wx you can fix and add things yourself and submit pull requests.
PyQt support is more active as Phil is earning a life from it while wxWidgets and wxPython are not commercial.

I’m not a fan of ‘installers’ or virtual environments. I keep all programs up to date such that they can run in the same environment.

I’m using a shared Python installation with an “installation” script that just registers the file extensions to the interpreter.
It’s on the network for casual users and measurement programs. For people who need to run the GUI programs several times a day, I’m using a batch file to copy it locally.
The interpreter’s sitecustomize.py script adds some folders to the path, such that the libraries can be shared between different Python versions.
The folder layout is something like this, where e.g. ‘DataAnalysis’ is added to the path

Python
  Install36.bat
  Install312-64.bat
  Install.py
  GUIApplication1.bat
  Python36
    python.exe
    python.dll
    ....
  Python312-64
    python.exe
    python.dll
    ....
  Libraries
     DataAnalysis
     Instrumentation
     Support
     _GUIApplication1
       GUIApplication1.py
     _GUIApplication2

Starting a GUI application with the interpreter from the network file share can take a minute. This is acceptable for us for measurement programs, which are started once a day or week and where I don’t want to keep local installations in sync.
Starting it locally is much faster, usually one or two seconds. If you build an ‘exe’, you can save some fractions of a second.

I’m quite conservative with my Python environment. I’m just switching from 3.6 32 bit to 3.12 64 bit as we have now no Windows 7 32 bit machines any more at work.

An alternative, if you prefer ‘exe’ files is to use the mechanism that many packages and python itself are using.
I’m just testing this for a wxGlade binary distribution.
If you don’t know the background: python.exe or also the ‘scripts’ like ...\Scripts\pip.exe are just loading the Python DLL and have the main program as built-in payload. By default they have a hard-coded DLL path, but it can be made relative. Just open such a file in an editor and have a look.
Here you can see how I’m using this mechanism for a wxGlade binary:
https://github.com/wxGlade/wxGlade/blob/9bf7b4fb2230005857e66fe87540b49c63939954/install/make_exe.py
The ‘exe’ does not need to be update on each and every modification of the source files. If you prefer to hide the .py sources, you can use .pyc files for your user installation.

Regards,
Dietmar

I’m quite sure that the fastest way to do so is to download wxGlade and work through the tutorial supplied with it (from the help menu). You should be able to create your first application within a few hours. The other most valuable resource is the wxPython demo.

I work for a very large multinational company, and I use Python and wxPython every day.

We have several desktop GUIs, all wxPython-based, which we distribute to users across the company.

Given my history with wxPython, I have never really evaluated any other alternatives: back in time there were licensing issues with PyQT, and honestly TkInter and GTK are way too underpowered for what I need to do.

Some of our wxPython applications are quite complex, both in terms of UI and core functionalities.

We distribute our applications via standalone installers created via py2exe + InnoSetup. I have always disliked the PyInstaller approach, not to mention that I would never bundle a 400 MB application into a single executable using PyInstaller - it would take 3 minutes to unpack it in memory and start it up. The largest - and most complex - application we have starts up in about 2 seconds on various machines to which we have deployed the executable.

We never really had any particular issue in using wxPython as a GUI frontend for our applications - besides bugs introduced by me of course.

When it comes to UI design, I do most of my work by hand, although sometimes wxGlade and/or wxUIEditor come in handy (especially when I’m bored of using sizers).

Thank you for this very nice reply. I still have to try py2exe as I was quite happy with PyInstaller but your description make me want to try it.
Thank you :slight_smile:

Another very interesting tool for compiling your python scripts into an executable is cx_freeze.
It has the advantage of starting your programs faster than pyinstaller and it is as easy to use as py2exe.
In addition, many tutorials are available on the internet.