Create a directly-executable cross-platform GUI app using Python
Asked Answered
B

14

311

Python works on multiple platforms and can be used for desktop and web applications, thus I conclude that there is some way to compile it into an executable for Mac, Windows and Linux.

The problem being I have no idea where to start or how to write a GUI with it, can anybody shed some light on this and point me in the right direction please?

Booking answered 5/8, 2008 at 22:26 Comment(0)
B
315

First you will need some GUI library with Python bindings and then (if you want) some program that will convert your python scripts into standalone executables.

Cross-platform GUI libraries with Python bindings (Windows, Linux, Mac)

Of course, there are many, but the most popular that I've seen in wild are:

  • Tkinter - based on Tk GUI toolkit.

    De-facto standard GUI library for python, free for commercial projects.

  • WxPython - based on WxWidgets.

    Popular, and free for commercial projects.

  • Qt using the PyQt bindings or Qt for Python.

    The former is not free for commercial projects. The latter is less mature, but can be used for free.

    Qt itself supposedly supports Android and iOS as well, but achiving same with it's bindings should be tricky.

  • Kivy written in Python for Python (update 2023).

    Supposedly supports Android and iOS as well.

Note that users of WxWidgets (hence WxPython users), often need to use WxQt as well, because WxWidgets's own GUI is not yet at Qt's level (at time of writting).

Complete list is at http://wiki.python.org/moin/GuiProgramming

Stand-alone/ single executables

For all platforms:

  • PyInstaller - The most active (which could also be used with PyQt)
  • fbs - if you chose Qt above (commercial, with free plan)

For Windows:

  • py2exe - used to be the most popular

For Linux:

  • Freeze - works the same way like py2exe but targets Linux platform

For MacOS:

  • py2app - again, works like py2exe but targets Mac OS
Bernitabernj answered 5/8, 2008 at 22:26 Comment(5)
It's worth noting that as of 4.5 QT will be under the LGPL.Probationer
... which is why you should now very much consider using PySide which is LGPL. It's also more Pythonic than PyQt4's Python 2 API.Selfcontradiction
You might also add cx_Freeze, which is cross-platform, maintained, and supports Python 3.x.Smite
Does BeeWare belong on this list? I tried to ask as a separate question and got downvoted as off topic even though this seems like a simple (and useful) list of tools. #63157543Pict
And what about If we wanted to make an desktop app that uses a database locally, lets say mysql or mongodb, and we dont care whether the end user has not pre installed the db server software. Iam imaging that like the app.exe includes a script or something that install the db server, so that the app can then make the schemas/table etcCracked
H
61

Another system (not mentioned in the accepted answer yet) is PyInstaller, which worked for a PyQt project of mine when py2exe would not. I found it easier to use.

http://www.pyinstaller.org/

Pyinstaller is based on Gordon McMillan's Python Installer. Which is no longer available.

Holsworth answered 28/8, 2008 at 8:41 Comment(3)
And more than 3 years after this was answer was written, pyinstaller STILL does not support Python 3, nor is it listed in the roadmap of future releases. I mean, is AIX and Solaris support really more useful than Python 3?Monaghan
It supports Python 2.7 and Python 3.3, 3.4 and 3.5 now.Emulsify
And 3.6 too now.Hagiography
T
16

An alternative tool to py2exe is bbfreeze which generates executables for windows and linux. It's newer than py2exe and handles eggs quite well. I've found it magically works better without configuration for a wide variety of applications.

That answered 15/8, 2008 at 11:56 Comment(0)
A
11

There's also PyGTK, which is basically a Python wrapper for the Gnome Toolkit. I've found it easier to wrap my mind around than Tkinter, coming from pretty much no knowledge of GUI programming previously. It works pretty well and has some good tutorials. Unfortunately there isn't an installer for Python 2.6 for Windows yet, and may not be for a while.

Arnelle answered 5/11, 2008 at 15:53 Comment(0)
L
6

Since python is installed on nearly every non-Windows OS by default now, the only thing you really need to make sure of is that all of the non-standard libraries you use are installed.

Having said that, it is possible to build executables that include the python interpreter, and any libraries you use. This is likely to create a large executable, however.

MacOS X even includes support in the Xcode IDE for creating full standalone GUI apps. These can be run by any user running OS X.

Lobeline answered 6/8, 2008 at 0:29 Comment(0)
M
6

For the GUI itself:

PyQT is pretty much the reference.

Another way to develop a rapid user interface is to write a web app, have it run locally and display the app in the browser.

Plus, if you go for the Tkinter option suggested by lubos hasko you may want to try portablepy to have your app run on Windows environment without Python.

Middleoftheroad answered 19/8, 2008 at 9:45 Comment(0)
A
4

I'm not sure that this is the best way to do it, but when I'm deploying Ruby GUI apps (not Python, but has the same "problem" as far as .exe's are concerned) on Windows, I just write a short launcher in C# that calls on my main script. It compiles to an executable, and I then have an application executable.

Algebraist answered 15/8, 2008 at 12:0 Comment(2)
@Brian Have you seen _why's technique for self-executing Shoes apps? It could probably be done with non-Shoes programs.Valida
For these apps, none of my users are anonymous. I know if they have the runtime, and if they don't, I can install it for them. The principal concern in this topic is how to launch these applications without having to open up a command prompt and type the runtime's executable followed by the program name.Algebraist
T
3

PySimpleGUI wraps tkinter and works on Python 3 and 2.7. It also runs on Qt, WxPython and in a web browser, using the same source code for all platforms.

You can make custom GUIs that utilize all of the same widgets that you find in tkinter (sliders, checkboxes, radio buttons, ...). The code tends to be very compact and readable.

#!/usr/bin/env python
import sys
if sys.version_info[0] >= 3:
    import PySimpleGUI as sg
else:
    import PySimpleGUI27 as sg

layout = [[ sg.Text('My Window') ],
          [ sg.Button('OK')]]

window = sg.Window('My window').Layout(layout)
button, value = window.Read()

Image created from posted PySimpleGUI code

As explained in the PySimpleGUI Documentation, to build the .EXE file you run:

pyinstaller -wF MyGUIProgram.py

Thermistor answered 9/10, 2018 at 12:30 Comment(0)
R
2
# I'd use tkinter for python 3

import tkinter

tk = tkinter.Tk()
tk.geometry("400x300+500+300")
l = Label(tk,text="")
l.pack()
e = Entry(tk)
e.pack()

def click():
    e['text'] = 'You clicked the button'

b = Button(tk,text="Click me",command=click)
b.pack()

tk.mainloop()

# After this I would you py2exe
# search for the use of this module on stakoverflow
# otherwise I could edit this to let you know how to do it

py2exe

Then you should use py2exe, for example, to bring in one folder all the files needed to run the app, even if the user has not python on his pc (I am talking of windows... for the apple os there is no need of an executable file, I think, as it come with python in it without any need of installing it.

Create this file

  1. Create a setup.py

with this code:

from distutils.core import setup
import py2exe

setup(console=['l4h.py'])

save it in a folder

  1. Put your program in the same folder of setup.py put in this folder the program you want to make it distribuitable: es: l4h.py

ps: change the name of the file (from l4h to anything you want, that is an example)

  1. Run cmd from that folder (on the folder, right click + shift and choose start cmd here)
  2. write in cmd:>python setup.py py2exe
  3. in the dist folder there are all the files you need
  4. you can zip it and distribute it

Pyinstaller

Install it from cmd

**

pip install pyinstaller

**

Run it from the cmd from the folder where the file is

**

pyinstaller file.py

**

Update

Read this post to make an exe on windows with pyinstaller the proper way and with one file and images in it https://pythonprogramming.altervista.org/auto-py-to-exe-only-one-file-with-images-for-our-python-apps/

Rugby answered 31/1, 2017 at 19:51 Comment(0)
B
2

!!! KIVY !!!

I was amazed seeing that no one mentioned Kivy!!!

I have once done a project using Tkinter, although they do advocate that it has improved a lot, it still gives me a feel of windows 98, so I switched to Kivy.

I have been following a tutorial series if it helps...

Just to give an idea of how kivy looks, see this (The project I am working on):

The Project that I am working on

And I have been working on it for barely a week now ! The benefits for Kivy you ask? Check this

The reason why I chose this is, its look and that it can be used in mobile as well.

Backler answered 10/1, 2020 at 7:24 Comment(0)
U
1

You don't need to compile python for Mac/Windows/Linux. It is an interpreted language, so you simply need to have the Python interpreter installed on the system of your choice (it is available for all three platforms).

As for a GUI library that works cross platform, Python's Tk/Tcl widget library works very well, and I believe is sufficiently cross platform.

Tkinter is the python interface to Tk/Tcl

From the python project webpage:

Tkinter is not the only GuiProgramming toolkit for Python. It is however the most commonly used one, and almost the only one that is portable between Unix, Mac and Windows

Unscreened answered 5/8, 2008 at 22:40 Comment(6)
So how would you make an installation package to deploy on systems of people who just want a 1-step install (e.g. double-click on a single installation package in Windows)?Stellate
For that there are a few approaches I know of: you would likely write an installer in batch script or compiled for the target system which would drop the needed files someplace and install the needed libraries and runtimes in the process.Unscreened
Installing Python as part of your own install would be a little fiddly, because you would have to deal with the possibility of the wrong version of Python already being installed. You'd have to install side by side, such that your application could access the newly-installed version of Python, but any existing applications continued to use the old version of Python. (ie without messing up things like the .py file association or the PATH)Billy
More likely your installer would check for the existence of the right version of Python, and if it found it, use that, otherwise install python as a part of the install process.Unscreened
Right - but that second option 'otherwise install python as a part of the install process', is exactly what I'm talking about. That would be fiddly, for the reasons I gave.Billy
Or just make an installer which will install a Python distribution bundled with the libraries you need, like Python(x,y) (only for Windows and Linux), or Enthought Canopy Express (for Linux, Windows and MacOSX).Mormon
B
1

You can use appJar for basic GUI development.

from appJar import gui

num=1

def myfcn(btnName):   
    global num
    num +=1
    win.setLabel("mylabel", num)

win = gui('Test')

win.addButtons(["Set"],  [myfcn])
win.addLabel("mylabel", "Press the Button")

win.go()

GUI when running

See documentation at appJar site.

Installation is made with pip install appjar from command line.

Barabarabarabas answered 8/6, 2017 at 10:21 Comment(0)
M
1

There's three things you could do:

The first thing is to find a GUI Designer that can launch its code as standalone applications like .exe files. I use a version of MatDeck (for people using GUI Designers I recommend MD Python Designer) as I believe(I use another version so I'm not too sure.) it allows me to convert the code to a standalone applications and by having it as such, there is no need to install the software on every PC that's going to run the program.

The second option is partially bypassing the problem, launch the GUI as a web page. This would give you the most compatibility as most if not all OS can utilize it. Once again, you would need a GUI Designer that can convert its components into a web compatible format, I've done it once and I used the same version of MatDeck(Visionary Deck), I would not recommend MD Python Designer this time as I don't know if it can turn its GUIs into websites using web assembly whereas Visionary Deck I've tried and tested. As with all things there are most likely other software this is just one I use frequently because I work a lot with Mathematics and Physics.

The third option is also kind of bypassing the problem but do it in Tkinter and just ensure you have a Python IDE or just plain old Python and run the code, this will launch the GUI. This is a good solution and maybe the simplest but I wouldn't class it as the shortest or the best. If you only plan to switch between a few operating systems and computers this will probably be your best bet.

Malvina answered 10/4, 2021 at 13:56 Comment(0)
N
0

You could create and compile a C++ script which executes your python script. This would be more difficult than the above suggestions but would definitely be worth looking into as It'll make you return to Python with more confidence and possibly even a deeper understanding of how It all works.

Nerine answered 22/8, 2023 at 19:10 Comment(1)
Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.Moolah

© 2022 - 2024 — McMap. All rights reserved.