15 Minute Apps

Common desktop apps in Python, using PyQt
Heads up! You've already completed this tutorial.

A collection of 15 small — minute — desktop applications written in Python using the PyQt framework. These apps are intended as examples from which you can poke, hack and prod your way to writing your own tools.

The apps

The apps showcase various parts of the Qt framework, including advanced widgets, multimedia, graphics views and decorationless windows. However, the most generally interesting/feature complete applications are Minesweeper, Solitaire and Paint.

The source code for all apps is available in the Github repository. All code is MIT licensed and free to use to in your own projects.

Web Browser - "MooseAche"

Browser

An example web browser built with Python and Qt. Using the QtWebEngineWidgets system introduced in Qt5.6, this provides a single-window browsing experience with the usual controls, as well as saving and loading HTML.

Web Browser (tabbed) — "Mozzarella Ashbadger"

Browser tabbed

Mozarella Ashbadger is the latest revolution in web browsing! Go back and forward! Print! Save files! Get help! (you’ll need it). Any similarity to other browsers is entirely coincidental.

Packaging Python Applications with PyInstaller by Martin Fitzpatrick — This step-by-step guide walks you through packaging your own Python applications from simple examples to complete installers and signed executables.

More info Get the book

Minesweeper — "Moonsweeper"

Moonsweeper

Explore the mysterious moon of Q'tee without getting too close to the alien natives!

Moonsweeper is a single-player puzzle game base on the classic Minesweeper. The objective of the game is to explore the area around your landed space rocket, without coming too close to the deadly B'ug aliens. Your trusty tricounter will tell you the number of B'ugs in the vicinity.

Notepad — "No2Pads"

No2Pads

A very simple notepad clone using the QTextEdit widget to handle more or less everything. Supports file loading, saving and printing.

Calculator — "Calculon"

Calculon

A simple calculator application implemented in Python using PyQt. The UI was designed in Qt Designer and the calculator operations are implemented using simple stack-based logic.

Word Processor — "Megasolid Idiom"

Wordprocessor

The word processor for all your small, poorly formatted documents. An extension of the notepad, again using a QTextEdit but with rich text editing enabled.

Webcam/Snapshot — "NSAViewer"

Camera

With this webcam snapshot application you can take photos of what is currently being viewed by your webcam. Uses the Qt QtMultimedia framework for handling all the interaction with the camera, and supports multiple cameras if you have them.

Media Player — "Failamp"

Mediaplayer

Simple app to listen to and watch videos and audio files, with built in playlist. Uses QtMultimedia and QtMultimediaWidgets to handle playback and manage the playlist.

Post-it Notes - "Brown Note" (QtDesigner)

Brown note

Take temporary notes on your desktop, with this floating-note app. Notes are stored locally in a SQLite database.

Paint - "Piecasso" (QtDesigner)

Piecasso

Express yourself with PieCasso, the only painting app to feature ready made pictures of pie.

Piecasso is a clone of the Paint programme from Windows 95 (ish) with a few additions (and subtractions). The programme features standard tools including pen, brush, fill, spray can, eraser, text and a number of shapes.

Unzip - "7Pez" (QtDesigner)

Unzip

Unzip your files with a cat. Drag-drop your zip file onto the floaty cat, and fill up it's Pez-file repository. Press the head to release the Pez (your files) into the same folder.

Translator - "Translataarrr" (QtDesigner)

Translatarrrr

A translator from any language (supported by Google translate) to pirate. This uses a remote API from http://api.funtranslations.com for English to Pirate translation, and a unofficial Python wrapper around Google translate for other languages to English.

Weather - "Raindar" (QtDesigner)

Weather

Get your daily weather and 15hr forecast. Data is provided by the free weather and forecast API from https://openweathermap.org/

Currency converter - "Doughnut" (PyQtGraph)

Doughnut

This is a simple currency exchange rate tracker implemented in PyQt, using the fixer.io API for data. The default setup shows currency data for the preceding 180 days.

Solitaire - "Ronery" (QGraphicsScene)

Ronery

The classic card Solitaire (Klondike) game with a North Korea / Team America: World Police theme. The game is otherwise identical, offering the same options. Built with PyQt, it uses QGraphicsScene to handle the play area.

Getting started

To use each app you first need to install the requirements. In most cases the only requirements are PyQt5, and occasionally requests (for http requests). To install app-specific requirements change to the folder of the app and run:

python
pip3 install -r requirements.txt

Once the requirements are installed, you can run the app using Python 3.

python
python3 <filename>.py

The application window should appear.

License

All code is licensed under an MIT license. This allows you to re-use the code freely, remixed in both commercial and non-commercial projects. The only requirement is to include the same license when distributing.

The intent here is to allow as many people as possible to make use of this code, so you if you have specific license requirements or questions, feel free to ask — the answer is probably "yes."

Icons used in the applications are by Yusuke Kamiyaman.

Create GUI Applications with Python & Qt6 by Martin Fitzpatrick — (PyQt6 Edition) The hands-on guide to making apps with Python — Over 10,000 copies sold!

More info Get the book

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak

15 Minute Apps was written by Martin Fitzpatrick .

Martin Fitzpatrick has been developing Python/Qt apps for 8 years. Building desktop applications to make data-analysis tools more user-friendly, Python was the obvious choice. Starting with Tk, later moving to wxWidgets and finally adopting PyQt.