The concept of a web application is broader than you might guess: using the webbrowser as a graphical user interface (GUI) makes sense even if you are just running a stand alone application on a local machine. After all, every machine has a browser intalled nowadays, so using this as a GUI might save you from headaches trying to find a cross platform GUI toolkit that looks good and is familiar to the user.
In order to use the browser as a user interface we have to start it up in a platform independent way, start a web application framework serving our application at the same time and make sure that the new web browser window points to the correct location. This sounds like a lot of work but in Python this is actually rather straightforward.
Let's have a look at the following code:
import cherrypy
import webbrowser
import threading
def openbrowser():
webbrowser.open('http://127.0.0.1:8080')
class Root(object):
@cherrypy.expose
def index(self):
return 'Hi There'
if __name__ == "__main__":
threading.Timer(3.0,openbrowser).start()
cherrypy.quickstart(Root(),config={})
If you save the code above as webapp.py
and you have CherryPy installed, you can start the program by typing the following in a terminal (or dos-box):python webapp.py
It will start up a webserver running on your local machine that listens on port 8080. It will also start up a new browser window and direct it to http://127.0.0.1:8080
. The Python version is not relevant here as we do not use any 3.x specific constructs.
The trick is to utilize Python's bundled module webbrowser to open a browser window in a cross platform compatible way as implemented in the openbrowser()
function. We do not call this function right away though, because the browser then might start before there is a webserver running. We cannot start CherryPy first either, because the quickstart()
function does not return. Therefor we instantiate a Timer
object from the threading module and tell it to call our openbrowser()
function after three seconds, which should be plenty of time for the CherryPy server to start.