Files
awesome-python/website/data/category_intros/gui-development.md
T
Vinta ChenandClaude eaddf9441e docs: drop links from gui-development how-to-choose list
7 of its 13 items carried links while the other intros' lists carry none, and the entry table already links every project.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-09-26 22:14:39 +08:00

3.0 KiB

Among Python GUI libraries, PySide6 is the default for desktop apps and tkinter for small tools. For a UI in the browser, pick NiceGUI.

How to choose:

  • Full desktop app: PySide6, or PyQt6 if your app can be GPL or you buy a license
  • Small tool without third-party packages: tkinter
  • Modern look for a tkinter app: CustomTkinter
  • tkinter layout drawn in Figma: Tkinter Designer
  • Native widgets on Windows, macOS, and Linux: wxPython
  • GNOME app on Linux: PyGObject
  • GPU-rendered tools for your scripts: Dear PyGui
  • Multi-touch apps on Android and iOS: Kivy
  • Native widgets on desktop and mobile: Toga
  • One codebase for web, desktop, and mobile: Flet
  • Dashboards and web UIs: NiceGUI
  • HTML/JavaScript frontend in a desktop window: pywebview
  • GUI for an existing argparse script: Gooey

PySide6 is Qt for Python, the official Python bindings for Qt, under the LGPL, the GPL, or a commercial license. Qt's docs recommend a virtual environment over installing it into your system Python. Ship it with pyside6-deploy.

PyQt6 wraps the same Qt, but Riverbank licenses it under the GPL or a commercial license, not the LGPL. So a closed-source app needs a commercial PyQt6 license, while PySide6 can stay on the LGPL.

tkinter is the standard Python interface to Tcl/Tk. Python's docs recommend the themed tkinter.ttk widgets, which follow the platform's native theme, over the classic ones most online docs still use.

NiceGUI runs a web server and shows your UI in the browser, which suits dashboards, micro web apps, and robotics projects. Pass native=True to ui.run() to open it in a desktop window instead, or bundle it into an executable with nicegui-pack.

Kivy runs the same code on Android, iOS, Linux, macOS, and Windows. Declare the widget tree in the KV language to keep the UI apart from your logic, and build Android packages with Buildozer.

Toga uses native system widgets, not themes, so a Toga app is a native app on each platform. Start with the BeeWare tutorial, which packages your app with Briefcase.

Flet builds web, desktop, and mobile apps from one Python codebase, without HTML, CSS, or JavaScript. Package it for each platform with flet build.

Whatever you pick, keep slow work out of event handlers, or the window freezes. The tkinter docs say to break it into smaller pieces with timers or run it in another thread, and Qt's docs suggest threads for the same reason.