I Built a Native RTL Python GUI with Tkinter (and it actually looks good)

Published: (February 1, 2026 at 06:00 AM EST)
2 min read
Source: Dev.to

Source: Dev.to

Introduction

Python Tkinter often gets a bad reputation, with many picturing Windows 95‑style gray buttons and clunky interfaces. I wanted to challenge that perception.

Over the past few weeks I’ve been rebuilding my open‑source privacy tool, DotScramble, from the ground up. My goal was to prove that you can build a modern, scalable, and fully localized desktop app using only standard Python libraries—provided you use the right architecture.

Today I released v1.2.3, and here’s how I solved the biggest engineering challenges.

The Move to MVC

I refactored the entire codebase into a strict Model‑View‑Controller (MVC) pattern:

  • Models – Handle the heavy lifting (OpenCV image processing, face detection logic).
  • Views – Pure UI code. They don’t know how things work; they just display data.
  • Controllers – The glue. They take user input from the view and tell the model what to do.

This separation made the code incredibly stable and easy to test.

The “RTL” Challenge

  • Sidebar: Left ➡️ Right
  • Toolbar: Left ➡️ Right
  • Icons: Flipped

I built a dynamic RTL_Manager that detects the language direction and rebuilds the grid layout on the fly. You can switch between English and Arabic instantly, and the UI literally flips before your eyes—no restart required.

Modern UI & Persistence

  • Theme Engine: A centralized theme manager supporting “Cyberpunk”, “One Dark”, and “Dracula” palettes.
  • SQLite Auto‑Save: A lightweight SQLite database now saves every slider position and toggle state in real time, eliminating the need to re‑set blur strength each time the app opens.

Features Overview

  • Batch Processing: Drag & drop a folder of 100 images, apply a “Pixelate” effect, and export them all in seconds.
  • Privacy First: Everything runs locally; no cloud uploads.

Open Source

GitHub Repository:

I’d love to hear your feedback or see your pull requests!

Back to Blog

Related posts

Read more »