<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ere123</title>
    <description>The latest articles on DEV Community by ere123 (@ere123).</description>
    <link>https://dev.to/ere123</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4210331%2F7c12f0e7-ab5b-4ac3-9367-8675c8c86838.jpg</url>
      <title>DEV Community: ere123</title>
      <link>https://dev.to/ere123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ere123"/>
    <language>en</language>
    <item>
      <title>I built a radial menu launcher for Windows in Python</title>
      <dc:creator>ere123</dc:creator>
      <pubDate>Tue, 27 Oct 2026 09:09:30 +0000</pubDate>
      <link>https://dev.to/ere123/i-built-a-radial-menu-launcher-for-windows-in-python-3c8b</link>
      <guid>https://dev.to/ere123/i-built-a-radial-menu-launcher-for-windows-in-python-3c8b</guid>
      <description>&lt;p&gt;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 &lt;strong&gt;Bubbles&lt;/strong&gt;: hold a hotkey, and a ring of bubbles pops up around the cursor. Aim, release, done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2fofvhq1fh2gtzdiy41f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2fofvhq1fh2gtzdiy41f.gif" alt="Bubbles menu" width="726" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ere123-dev/bubbles-menu" rel="noopener noreferrer"&gt;https://github.com/ere123-dev/bubbles-menu&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hold&lt;/strong&gt; 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tap&lt;/strong&gt; the hotkey: the menu stays open and you pick with a click.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Folders&lt;/strong&gt;: rest the cursor on a folder bubble for a moment and it expands into its own ring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profiles&lt;/strong&gt;: "Work", "Home" or your own, switched with another hotkey.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is muscle memory. After a day you stop reading the bubbles and just flick toward the one you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I didn't plan: a file converter
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv0pq5n9r5nkgrff92nw0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv0pq5n9r5nkgrff92nw0.gif" alt="File converter" width="726" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Images, including iPhone HEIC: JPG, PNG, WEBP, ICO, PDF and more, plus "compress" and "shrink to 1920px"&lt;/li&gt;
&lt;li&gt;PDF: to images, to Word, to text, compress&lt;/li&gt;
&lt;li&gt;Word to PDF, Excel to PDF or CSV, CSV to Excel, TXT to PDF or Word&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h2&gt;
  
  
  Screen to GIF, straight to the clipboard
&lt;/h2&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjri7ugzqyaef9xw2ho27.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjri7ugzqyaef9xw2ho27.gif" alt="GIF recorder" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;h2&gt;
  
  
  A few technical bits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hotkeys&lt;/strong&gt; use &lt;code&gt;RegisterHotKey&lt;/code&gt;, so Windows itself "eats" the combination and other apps never see it. Releasing the keys is detected by polling &lt;code&gt;GetAsyncKeyState&lt;/code&gt; while the menu is open.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alt quirk&lt;/strong&gt;: releasing Alt normally activates the window menu of the focused app. Bubbles sends a harmless unassigned key in between (the same trick AutoHotkey uses).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UI&lt;/strong&gt;: PySide6 (Qt 6), with a bit of spring physics for the bubbles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Packaging&lt;/strong&gt;: 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.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Languages&lt;/strong&gt;: English and Russian, picked in the installer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Editing
&lt;/h2&gt;

&lt;p&gt;Click the tray icon to open the editor. You can drag shortcuts, &lt;code&gt;.exe&lt;/code&gt; files and links from the browser straight into the list, and the name and icon are filled in automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmtbh4f3bs0p7l736urj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftmtbh4f3bs0p7l736urj.gif" alt="Editor" width="720" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The exe isn't code-signed, so SmartScreen will warn you ("More info → Run anyway"). The source is all on GitHub, and &lt;code&gt;build.ps1&lt;/code&gt; builds the same exe.&lt;/li&gt;
&lt;li&gt;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.&lt;/li&gt;
&lt;li&gt;The demo GIFs were recorded with the Russian UI; the app switches to English automatically on an English Windows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Feedback welcome
&lt;/h2&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/ere123-dev/bubbles-menu" rel="noopener noreferrer"&gt;https://github.com/ere123-dev/bubbles-menu&lt;/a&gt;&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
