Skip to content
scarlion1Public

About

A lightweight Unicode character map viewer built with PyQt6

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Qt Character Map

A lightweight Unicode character map viewer built with PyQt6 — no dependencies beyond Qt itself.

Browse all 1,114,112 code points across all 17 Unicode planes (U+0000 – U+10FFFF) in a fast, scrollable 16-column grid.  Characters are rendered on demand by a virtual model, so the table stays responsive regardless of how large the covered range is.  Double-click any glyph to collect it in the text box below, then copy the whole string to the clipboard in one click.


Screenshot

image

Features

  • Full Unicode coverage — all 1,114,112 code points across all 17 planes (U+0000 – U+10FFFF)

  • Virtual rendering — only visible rows are drawn at any time; no pre-allocation of cell objects

  • Plane / block dropdown — snap instantly to any Unicode plane or notable block (CJK, Emoji, Arabic, etc.)

  • Jump to character — paste a glyph or enter a hex code point (e.g. 1F600) and press Enter

  • Glyph collector — double-click cells to build up a string in the text box

  • Copy / Clear — one-click clipboard copy and field clear

  • Ctrl + F keyboard shortcut to focus the search bar from anywhere in the window


Requirements

Dependency Version Notes
Python ≥ 3.10
PyQt6 ≥ 6.4
Noto Sans any Optional, but recommended — see note below.

Font note: the grid uses Noto Sans as its primary face because it covers a far wider range of scripts than most system defaults.  If Noto Sans is not installed Qt will fall back to the system sans-serif, which will show tofu □ for many code points.

  • Debian / Ubuntu

    #!/usr/bin/env sh
    sudo apt install fonts-noto
  • Fedora / RHEL

    #!/usr/bin/env sh
    sudo dnf install google-noto-sans-fonts
  • Arch

    #!/usr/bin/env sh
    sudo pacman -S noto-fonts

Installation

  1. Clone the repository

    #!/usr/bin/env sh
    git clone https://github.com/scarlion1/qtcharmap.git && \
    cd qtcharmap
  2. (Recommended) Create a virtual environment

    1. #!/usr/bin/env sh
      python -m venv .venv
      • Linux

        #!/usr/bin/env sh
        source .venv/bin/activate
      • Windows

        #!/usr/bin/env pwsh
        & .venv\Scripts\activate
  3. Install PyQt6

    #!/usr/bin/env sh
    pip install PyQt6

Usage

#!/usr/bin/env sh
python qtcharmap.py

Keyboard Shortcuts

Shortcut Action
Ctrl + F Focus the search bar
Enter (search bar) Jump to the entered character
Double-click cell Insert glyph at cursor in collector box

How the Grid Works

Characters are arranged in a table with 16 columns (0 – F):

  • The row header shows the Unicode block start address (e.g. U+0060).

  • The column headers show the low hex nibble 0–F.

So the cell at row U+0060, column 5 contains U+0065 → e.

Non-printable code points (control characters, lone surrogates, unassigned blocks) are left blank.

The table covers all 17 Unicode planes:

Planes Range Contents
0 (BMP) U+0000 – U+FFFF Almost all modern scripts, symbols, CJK
1 (SMP) U+10000 – U+1FFFF Historic scripts, emoji, musical symbols
2 (SIP) U+20000 – U+2FFFF Rare/classical CJK ideographs
3 (TIP) U+30000 – U+3FFFF Oracle Bone script, CJK Extension I
4–13 U+40000 – U+DFFFF Unassigned (reserved for future use)
14 (SSP) U+E0000 – U+EFFFF Language tags, variation selectors
15–16 (PUA) U+F0000 – U+10FFFF Private use (icon fonts, custom applications)

The plane / block dropdown lets you snap directly to any of these ranges without scrolling.


Desktop Entry (Linux)

You can add Qt Character Map to your application launcher with a .desktop file.  This works as-is if PyQt6 is installed system-wide (e.g. via your distro's package manager such as python3-pyqt6).  See below for suggestions with a virtual env.

  1. Make the script executable

    #!/usr/bin/env sh
    chmod +x /path/to/qtcharmap.py
  2. Link it to your PATH

    • Single-user

      #!/usr/bin/env sh
      ln -s /path/to/qtcharmap.py ~/.local/bin/qtcharmap.py
    • System-wide

      #!/usr/bin/env sh
      ln -s /path/to/qtcharmap.py /usr/local/bin/qtcharmap.py
  3. Install the desktop entry

    • Single-user

      #!/usr/bin/env sh
      touch $HOME/.local/share/applications/qtcharmap.desktop
    • System-wide

      #!/usr/bin/env sh
      touch /usr/local/share/applications/qtcharmap.desktop

…with content:

[Desktop Entry]
Type=Application
Name=Pure Qt Character Map
Comment=Inline-searching alternative character grid
Exec=qtcharmap.py
Icon=accessories-character-map
Terminal=false
Categories=Utility;Accessibility;Qt;
Keywords=character;map;unicode;font;glyphs;

Using a virtual environment

Point Exec= at your venv's own interpreter:

Exec=/path/to/your/venv/bin/python /path/to/qtcharmap.py

Replace the paths with wherever your venv and script actually live.  Absolute paths are required; ~ and $HOME are not expanded in Exec= lines.

About

A lightweight Unicode character map viewer built with PyQt6

Resources

Stars

1 star

Watchers

0 watching

Forks

Contributors

Languages