9. Text v grafickej ploche

Zatiaľ sme sa naučili jediný grafický príkaz:

platno.create_rectangle(x1, y1, x2, y2, fill='farba', outline='farba', width=číslo)

pomocou ktorého vieme do grafickej plochy (presnejšie na platno grafickej plochy) nakresliť obdĺžnik. Tento je určený:

  • dvomi protiľahlými vrcholmi (najčastešie pomocou ľavého horného (x1, y1) a pravého dolného (x2, y2) vrchola),

  • farbou výplne (fill),

  • farbou obrysu (outline),

  • hrúbkou čiary obrysu (width).

Príkaz na vypisovanie textu

Už sme naznačili, že príkazov, ktoré kreslia nejaké útvary do grafickej plochy je oveľa viac. Všetky majú tvar:

platno.create_útvar(parametre)

kde slovo útvar sa nahradí špecifickým menom grafického útvaru. Okrem rectangle si teraz ukážeme grafický útvar text. Takýto útvar je grafickou reprezentáciou nejakého znakového reťazca, t.j. do grafickej plochy môžeme umiestniť na ľubovoľnú pozíciu nejaký text. Pozrime najjednoduchšiu verziu tohto príkazu:

platno.create_text(x, y, text='znakový reťazec')

Na dané súradnice (x, y) sa vypíše zadaný znakový reťazec. Pozrime tento program:

import tkinter

platno = tkinter.Canvas(bg='white')
platno.pack()

platno.create_text(180, 20, text='Horný okraj')
platno.create_text(180, 230, text='Dolný okraj')
platno.create_text(310, 120, text='Pravý okraj')
platno.create_text(50, 120, text='Ľavý okraj')

Program vytvorí štyri grafické útvary, ktoré sú textami - budeme hovoriť, že program vypíše do grafickej plochy štyri texty. Dostávame takýto obrázok:

_images/09_01.png

Využime vypisovanie textu na označovanie geometrických útvarov. Nakreslíme obdĺžnik (na súradnice x1, y1, x2, y2) a potom všetky vrcholy obdĺžnika označíme písmenami A, B, C, D. Konkrétne, nech ľavý horný vrchol (x1, y1) má označenie A, pravý horný vrchol (x2, y1) má označenie B, pravý dolný vrchol (x2, y2) má označenie C``a ľavý dolný vrchol (``x1, y2) má označenie D:

import tkinter

platno = tkinter.Canvas(bg='white')
platno.pack()

x1 = 100
y1 = 50
x2 = 330
y2 = 200
platno.create_rectangle(x1, y1, x2, y2)
platno.create_text(x1, y1, text='A')
platno.create_text(x2, y1, text='B')
platno.create_text(x2, y2, text='C')
platno.create_text(x1, y2, text='D')

Po spustení vidíme obdĺžnik aj s menami vrcholov:

_images/09_02.png

Vidíme dôležitú vlastnosť vypisovaných textov do grafickej plochy: text sa vypíše tak, že (x, y) určuje jeho stred. Keď namiesto písmen ABCD použijeme dlhšie slová:

platno.create_text(x1, y1, text='prvý')
platno.create_text(x2, y1, text='druhý')
platno.create_text(x2, y2, text='tretí')
platno.create_text(x1, y2, text='štvrtý')

Teraz ešte názornejšie vidíme, že presný stred každého z týchto slov sa nachádza v niektorom z vrcholov obdĺžnika:

_images/09_03.png

Ak by sme chceli pomenovať vrcholy obdĺžnika písmenami ABCD ale tak, aby tieto označenia boli čitateľné, musíme každý z týchto textov posunúť nejakým smerom, napr.

platno.create_text(x1-5, y1-5, text='A')
platno.create_text(x2+5, y1-5, text='B')
platno.create_text(x2+5, y2+5, text='C')
platno.create_text(x1-5, y2+5, text='D')

Ktorým smerom a o koľko posuniete x-ovú a ktorým y-ovú súradnicu, záleží len od vás a od veľkosti vypisovaného textu. Náš program teraz vykreslí:

_images/09_04.png

Môžete vyskúšať rôzne smery posúvania.

Úlohy

  1. Vypísať riadky nejakej známej básničky alebo pesničky. Napr.

    _images/09_05.png

  1. Podprogram stitok na náhodnú pozíciu v grafickej ploche nakreslí biely obdĺžnik veľkosti 50 x 20 a do jeho stredu napíše nejaký text, napr. Python. Po desiatich zavolaniach podprogramu môžeme dostať napr.

    _images/09_06.png

  1. Napíšte podprogram nahodne_cislo, ktorý na náhodnú pozíciu v grafickej ploche vypíše náhodné šesťciferné číslo (teda číslo z intervalu od 100000 do 999999). Po niekoľkých zavolaniach podprogramu môžeme dostať napr.

    _images/09_07.png

Zhrnutie

čo sme sa naučili:

  • do grafickej plochy môžeme okrem obdĺžnikov zapisovať aj texty, využijeme príkaz create_text

  • pozíciu vypisovaného textu do grafickej plochy určujeme súradnicami stredu tohoto textu