One Problem, Loads of Solutions
One of the things I love most about computer programming is that there’s rarely just one “correct” way to solve a problem. Give ten developers the same task and you’ll likely get ten different solutions - all of which might work perfectly well. In programming, the how often matters less than the does it work. The approach you choose is shaped by your own technical background, the time you have available, and the resources you can realistically access. If your solution works, then it works and you weren’t wrong just because someone else took a different route to get to the same destination.
That’s something worth remembering, especially when comparing projects or reading other people’s code. A different solution doesn’t automatically mean a better or worse one; it just means different constraints, priorities, or preferences were at play. One developer might prioritise speed of development, another long-term scalability, and another simplicity or familiarity. As long as the end result meets the requirements, everyone involved was right in their own context.
Right now, I’m very much living this idea in practice. I’m currently trialling a variety of Python-based Graphical User Interfaces (GUIs) for my Bar Billiards Auto-Score Project, with the goal of figuring out which approach best fits my needs. Rather than committing too early, I’m experimenting with several frameworks to see how they feel, what they’re good at, and where they start to get in the way. Below is a quick overview of the tools I’m exploring and what makes each one different.
-
Python:
The foundation of the whole project. Python is readable, flexible, and has a massive ecosystem, which makes it ideal for experimenting with multiple approaches without constantly changing languages. -
Tkinter
Python’s built-in GUI toolkit. It’s simple, lightweight, and great for quick desktop applications. It may not be the prettiest, but it’s reliable and easy to get running fast. -
Django
A full-fat web framework rather than a GUI toolkit. Django is useful if the project evolves into a web-based scoring system with users, databases, and remote access. -
Jinja
A templating engine often used with Django (and Flask). Jinja helps generate dynamic HTML pages, separating logic from presentatio and that's ideal for clean web interfaces. -
Kivy
A more modern GUI framework aimed at touchscreens and cross-platform apps. Kivy is attractive if the project needs to run on tablets or mobile devices as well as desktops. -
Steamlit
Designed for rapidly building interactive web apps directly from Python scripts. It’s excellent for dashboards and live data displays with minimal boilerplate. -
PyQt
A powerful, professional-grade GUI framework based on Qt. PyQt allows for highly polished desktop applications, though it comes with a steeper learning curve. -
wxPython
A wrapper around native GUI components on each operating system. This gives applications a more “native” look and feel across platforms. -
PySimpleGUI
A beginner-friendly abstraction layer that sits on top of Tkinter, PyQt, and others. It focuses on reducing boilerplate and making GUI code more readable. -
PyForms
A higher-level framework aimed at rapid GUI development, often used in scientific or internal tooling contexts. It trades flexibility for speed of development.
In the worst-case scenario where none of those options turn out to be suitable I suppose I can always fall back on JavaScript. But JavaScript is a massive pain in the bum to work with, so one of these GUIs has to be capable of doing what I want it to do… or else!
Comments