DEV Community

Cover image for I built a radial menu launcher for Windows in Python
ere123
ere123

Posted on

I built a radial menu launcher for Windows in Python

I like keyboard shortcuts, but I got tired of remembering them. Desktop icons get buried, and search-based launchers still make me type. So I built Bubbles: hold a hotkey, and a ring of bubbles pops up around the cursor. Aim, release, done.

Bubbles menu

It's free, open source (MIT) and ships as a single exe for Windows 10/11.

GitHub: https://github.com/ere123-dev/bubbles-menu

How it works

  • Hold the hotkey: bubbles spring out around the cursor. Hover one and a small label shows what it opens. Release the keys over it to open the site, app, file or folder.
  • Tap the hotkey: the menu stays open and you pick with a click.
  • Folders: rest the cursor on a folder bubble for a moment and it expands into its own ring.
  • Profiles: "Work", "Home" or your own, switched with another hotkey.

The point is muscle memory. After a day you stop reading the bubbles and just flick toward the one you want.

The part I didn't plan: a file converter

At some point I realized the same hotkey could do something different when a file is selected in File Explorer. Now if you select a file and press it, you get conversion options instead of bubbles.

File converter

  • Images, including iPhone HEIC: JPG, PNG, WEBP, ICO, PDF and more, plus "compress" and "shrink to 1920px"
  • PDF: to images, to Word, to text, compress
  • Word to PDF, Excel to PDF or CSV, CSV to Excel, TXT to PDF or Word

No Microsoft Office or LibreOffice needed. The selected file is read from Explorer through the Shell.Application COM interface, PDFs go through pypdfium2 and pypdf, Word files through mammoth and python-docx, and PDF output is printed with Qt.

Screen to GIF, straight to the clipboard

The other extra: select an area, record up to 15 seconds, and the GIF lands on the clipboard as a file, so Ctrl+V into Discord or Telegram just works.

GIF recorder

Putting a file on the clipboard (not just an image) is what makes chat apps accept it as an attachment: the recorder writes the GIF to Pictures\Bubbles GIF and puts its path on the clipboard the same way Explorer does when you copy a file.

A few technical bits

  • Hotkeys use RegisterHotKey, so Windows itself "eats" the combination and other apps never see it. Releasing the keys is detected by polling GetAsyncKeyState while the menu is open.
  • Alt quirk: releasing Alt normally activates the window menu of the focused app. Bubbles sends a harmless unassigned key in between (the same trick AutoHotkey uses).
  • UI: PySide6 (Qt 6), with a bit of spring physics for the bubbles.
  • Packaging: Nuitka + MSVC into one ~45 MB exe. The exe installs itself: you pick a folder and shortcuts, and it can update over an old version or uninstall from Windows Settings.
  • Languages: English and Russian, picked in the installer.

Editing

Click the tray icon to open the editor. You can drag shortcuts, .exe files and links from the browser straight into the list, and the name and icon are filled in automatically.

Editor

Honest notes

  • The exe isn't code-signed, so SmartScreen will warn you ("More info → Run anyway"). The source is all on GitHub, and build.ps1 builds the same exe.
  • I used AI coding tools a lot while building this. The idea, design decisions and testing are mine, and I reworked a lot until it felt right.
  • The demo GIFs were recorded with the Russian UI; the app switches to English automatically on an English Windows.

Feedback welcome

This is my first public project. I'd love to hear what's confusing, what's missing, or what breaks on your machine. Issues and suggestions on GitHub are very welcome.

👉 https://github.com/ere123-dev/bubbles-menu

Top comments (0)