Pontmátrix karakterek tervezésére és megjelenítésére szolgáló alkalmazás

Ha a grafikus felhasználói felületen megjelenő bizonyos szövegeket figyelemfelkeltővé vagy a szokásostól eltérő kinézetűvé akarjuk tenni, akkor ennek egy módja lehet, hogy a szöveget pontmátrix karakterekkel jelenítjük meg.

A pontmátrix karakter olyan szimbólumot jelent, amely kétdimenziós rácsba rendezett pontok mintázataként jelenik meg.

Ahhoz, hogy ilyen, pontmátrix karakterekből álló szövegeket megjelenítsünk két dologra van szükség. Egyrészt meg kell tervezni a karakter képét, majd elő kell állítani a használni kívánt karakterek valamilyen mátrix-reprezentációját és végül azokat alkalmas módon eltárolni egy fájlban. Másrészt egy ilyen pontmátrix karakter leíró fájlban tárolt adatok alapján ki kell rajzoltatni a szöveg egyes karaktereit a grafikus felületen. Ennek folyamatát szemlélteti ez az ábra:

Elsőként tehát egy karaktertervező alkalmazást kell készíteni.

A karakterkép tervezését, mivel ez egy egyéni vizuális alkotás, grafikus felületen lehet hatékonyan megtenni. Tehát a programnak egy mátrix rácsozatot kell biztosítani, amelyben egyszerű módon (pl. egérgomb kattintással) ki lehet jelölni (pl. színváltással) a karakterképben megjelenítendő cellákat. Ez lesz a tervezőrács. Lehetőséget kell biztosítani arra, hogy a tervező eldöntse, hogy a karaktereket milyen sor és oszlop méretű rácsozatban kívánja előállítani. Ez a használni kívánt karakterkészlettől is függ, de mindenképpen szempont, hogy a megjelenített karaktereknek egyértelműen és jól felismerhetőnek kell lenniük. Ezért a kevesebb sorszám, vagyis alacsonyabb magasság (pl. 5×7, azaz 5 oszlop és 7 sor) összetettebb karaktereknél (pl. ékezetes betű), nem lesz megfelelő. Az 5×12 méret bizonyul olyannak, amelyekkel már az ékezetes nagybetűk és az írás fővonala alá nyúló betűk is jól megjeleníthetők. Ezért alapértelmezésben ezt alkalmazzuk.

Ha a tervezéssel megvagyunk, akkor a tervezőrács vizuális tartalmát le kell képezni egy mátrixba. Ez a mátrix speciális abban az értelemben, hogy csak két értéket tartalmaz, célszerűen 0 és 1, ahol a 0 jelenti a nem kijelölt, üres cellát. A mátrix kódbeli megvalósítása számos módon lehetséges. Mi most azt választjuk, hogy a mátrix sorai olyan karakterláncok, amelyek csak ’0’ és ’1’ számjegykaraktert tartalmaznak, és hosszuk azonos, a mátrix oszlopszámával megegyező. E karakterláncokat egy listában tároljuk, ahol a listaindexek a sorindexek. E választás bár nem helytakarékos, de előnye, hogy így a karakterképnek való helyes megfelelés ellenőrzése vizuálisan is megtehető.

Ahhoz, hogy tudjuk, hogy e mátrix-reprezentáció melyik karakterhez tartozik, a karaktert és a mátrixot egymáshoz kell rendelni. Ezt egyszerűen egy szótárban valósítjuk meg, ahol a kulcsok a karakterek, a hozzájuk tartozó értékek az előbb említett listák, amelyek elemei a ’0’ és ’1’ jegyeket tartalmazó karakterláncok.

A tervezés eredményét a későbbi használathoz el kell tárolni. Ezt is több módon lehet megtenni, de mivel szótárról van szó, így a JSON formátum tűnik célszerűnek a könnyű kódolás és dekódolás miatt, hiszen a szótár egyszerűen egyetlen JSON objektumba képződik le.

Ami a tárolt pontmátrix karakterkészlet használatát, megjelenítését illeti, első lépésben a leíró JSON fájl tartalmát beolvassuk egy szótárba. Ezután vesszük a megjelenítendő szöveg egyes karaktereit és kikérjük a szótárból a hozzá tartozó mátrix-reprezentációt. Ennek alapján egy vászon (Canvas) elemen körökkel vagy négyzetekel kirajzoljuk a mátrixpontokat, majd az egyes vásznakat egymást követően lehelyezzük egy keretben (Frame). E keretet tudjuk aztán a főablakban vagy máshol elhelyezni, és így a szöveget megjeleníteni.

A fenti elvek alapján készített alkalmazás forráskódját különböző modulokba szervezve láthatjuk alább. A megértést a részletes kommentek segítik.

A karaktertervező felülete négy fő tartományra tagolódik:

  • a tervezőrács,
  • a megtervezett karakterkészletet tároló fájl tartalmát mutató rész,
  • egy üzenetsáv, amelyen vagy hibaüzenetek vagy az egyes műveletekről való visszajelzés jelenik meg, valamint
  • egy eszköztárnak is nevezhető rész, ahol a következők helyezkednek el:
    • az egyes végezhető műveleteket indító gombok
    • egy beviteli mező a tervezendő karakter számára,
    • egy beviteli mező, ami a fájl megadására szolgál.

Mind a négy tartományt egy-egy osztály valósítja meg.

A designer modul DotMatrixCharDesigner osztályának példánya jelenti a pontmátrix formában megjelenő karakterek tervezését lehetővé tevő alkalmazást. Az osztály példányosításakor meg kell adni egy fájlt a charset_filepath paraméternek, amelybe a megtervezett karakterek és pontmátrix leírásuk kerül JSON objektumként. Ha a megadott fájl egy létező pontmátrixleíró JSON fájl, akkor ennek tartalma beolvasásra kerül feltéve, hogy az nincs ellentmondásban a tervezendő pontmátrix sor- és/vagy oszlopméretével, amelyet a rowcount és columncount argumentumokkal lehet meghatározni.

Sikeres beolvasás után a fájl tartalma megjelenik a jobb oldali címkézett keretben, ami segít megállapítani, hogy mely karakterek vannak már megtervezve. Ha pedig egy már elmentett karaktert szerkeszteni akarunk, akkor megadva a karaktert a bal alsó beviteli mezőben, a „Betölt” gomb megnyomásával a hozzá tartozó pontmátrix betölthető és megjeleníthető a tervezőrácsban.

A tervezőrácsban bal egérgomb kattintással lehet a mátrixpontokat ki/be kapcsolni, és így a fekete színű cellákkal a karakter formáját kialakítani.

Akár új karaktert, akár egy már meglévőt szerkesztünk a rácsban, ha befejeztük, akkor a „MENTÉS” gomb megnyomásával el kell menteni a tervezés, illetve szerkesztés eredményét.

Ha egy karaktert a készletből ki akarunk törölni, akkor a karakter beviteli mezőbe történő írása után az „Eltávolítás” gombra kell kattintani.

A dotmatrixstring_widget modulban található DotMatrixString osztály egy példánya az inicializáláskor a string_to_display paraméternek átadott karakterláncot pontmátrix formában jeleníti meg egy Frame objektumon úgy, hogy az egyes karakterek egymást követően lehelyezett Canvas elemeken vannak kirajolva. Azt, hogy hogyan jelenjenek meg a karakterek a filepath argumentumban megadott pontmátrix-leíró JSON fájl tartalma határozza meg.

Az inicializáláskor az fg és bg opcionális argumentumokkal megadható a szöveg- és háttérszín, valamint az, hogy a mátrixpontok körrel vagy négyzettel legyenek megjelenítve. Ha négyzettel, akkor a marker paraméternek a „rectangle”, ha körrel, akkor a „circle” értéket kell adni. Ez utóbbi az alapértelmezett.

A karakterek alapértelmezésben a beolvasott pontmátrix leíró fájlban szereplő sor- és oszlopszám szerinti pixel méretben jelennek meg (pl. 5×12 pixel), de ennek egész számú többszörösére nagyíthatók a scale_factor beállításával.

A karaktertervező alkalmazás felületének képernyőképe, valamint a dotmatrixstring_widget modulban található tesztsorok eredménye látható alább:

A teljes forráskód elérhető ezen a Github linken: https://github.com/pythontudasepites/dotmatrix_character_designer

A futtatáshoz Python 3.10+ verzió szükséges.

Ebben az alkalmazásban a GUI felület kialakítása és a fájlműveletek voltak a hangsúlyosak. Ezekről a tudnivalókat a Python tudásépítés lépésről lépésre című e-könyvben részletesen a „Grafikus felhasználói felület készítése” és a „Mentsük, ami menthető! – fájlok és mappák” című fejezetek tartalmazzák. Természetesen az alkalmazás számos más nyelvi ismeretet is igényel, amelyeket az e-könyv egyéb fejezetei szintén részletesen tárgyalják.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.