tkinter-unblur
Note:
hdpitkinterhas been reborn astkinter-unblurwith modern features. See migration guide.
Fix blurry Tkinter applications on Windows 10/11 high-DPI displays.
The Problem
Tkinter applications look blurry and pixelated on modern high-resolution displays with scaling enabled (125%, 150%, 200%, etc.). This is because Tkinter is not DPI-aware by default on Windows.
The Solution
# Before (blurry)
from tkinter import Tk
# After (crystal clear)
from tkinter_unblur import Tk
That's it. One import change, and your Tkinter app renders sharply.
Visual Comparison
Left: Standard Tkinter (blurry) | Right: tkinter-unblur (sharp)
Installation
pip install tkinter-unblur
Usage
from tkinter_unblur import Tk
root = Tk()
root.title("My App")
root.geometry("800x600")
root.mainloop()
That's all you need! For advanced usage, see API Reference.
API Reference
Tk Class
A drop-in replacement for tkinter.Tk with DPI awareness.
Attributes
dpi_x: int | None- Horizontal DPI (96 = 100% scaling)dpi_y: int | None- Vertical DPI (96 = 100% scaling)dpi_scaling: float- Scaling factor (1.0 = 100%, 1.5 = 150%)
Example:
root = Tk()
print(f"DPI: {root.dpi_x}x{root.dpi_y}")
print(f"Scaling: {root.dpi_scaling:.0%}") # e.g., "Scaling: 150%"
Methods
scale_value(value: int) -> int
Scale a numeric value by the DPI factor.
Example:
from tkinter import Label
root = Tk()
# Scale font size to maintain physical size across different DPI settings
label = Label(root, text="Hello", font=("Arial", root.scale_value(12)))
scale_geometry(geometry: str) -> str
Scale a geometry string ("WxH+X+Y") by the DPI factor.
Example:
root = Tk()
# Scale window geometry (width x height + x + y)
root.geometry(root.scale_geometry("800x600+100+50"))
Exceptions
TkinterUnblurError- Base exceptionUnsupportedPlatformError- Platform doesn't support DPI awarenessDPIDetectionError- DPI detection failed
How It Works
On Windows, this library:
- Calls
SetProcessDpiAwareness(1)to enable system DPI awareness - Queries the monitor's DPI using
GetDpiForMonitor - Provides scaling utilities for your application
On non-Windows platforms, the library is a simple passthrough to tkinter.Tk.
The implementation is based on this Stack Overflow answer.
Compatibility
| Platform | Status |
|---|---|
| Windows 10/11 | Full DPI awareness support |
| Linux | Passthrough (OS handles DPI) |
| macOS | Passthrough (OS handles DPI) |
| Python Version | Status |
|---|---|
| 3.9 - 3.14 | Supported |
| 3.8 | Not supported (EOL) |
Migrating from hdpitkinter
This package was formerly known as hdpitkinter. To migrate:
pip uninstall hdpitkinter
pip install tkinter-unblur
# Old
from hdpitkinter import HdpiTk
root = HdpiTk()
# New
from tkinter_unblur import Tk
root = Tk()
The HdpiTk name is still available as an alias for backwards compatibility:
from tkinter_unblur import HdpiTk # Works, but Tk is preferred
License
MIT License - see LICENSE for details.
Metadata
Release files for tkinter-unblur 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tkinter_unblur-2.0.1.tar.gz | 13.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tkinter_unblur-2.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.4 kB
Release files / tkinter_unblur-2.0.1.tar.gz
| Download URL | tkinter_unblur-2.0.1.tar.gz |
|---|---|
| Size | 13.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e7f52828c0e8124f62b9ed7c84b80cc0e39834fa000318786e661b1e178c122b
|
|
BLAKE2b-256 checksum How to use checksums |
e7c4945331755a9d15df69328e9cbdacc2537cbb3dd8bdc5affb9a809e68ddff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 15, 2025.
Transparency logRelease files / tkinter_unblur-2.0.1-py3-none-any.whl
| Download URL | tkinter_unblur-2.0.1-py3-none-any.whl |
|---|---|
| Size | 9.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6767b581a8c2c559ca3fc2404b85c9bf6cde763399aca43d888885e66b157bbd
|
|
BLAKE2b-256 checksum How to use checksums |
04ee5ed8eee63da2db1e3a3ffbb1b500193dd823d1f7dac6355d48c4be591507
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Dec 15, 2025.
Transparency log