# TextView (Python)

Sebastian Pölsterl
sebp@k-d-w.org 2011
Marta Maria Casetti
mmcasetti@gmail.com 2012
Widget, který zobrazuje GtkTextBuffer

# TextView

Toto je příklad widgetu Gtk.TextView.

Když zmáčkneme Enter, dostaneme nový řádek.

Můžeme se ale také dostat na nový řádek, když píšeme dlouhé věty (text bude zalomen na řádky mezi slovy).

Když máme dlouhééééééééééééééééééééééééééééééééééé

(to bylo dlouhé)

slovo, objeví se vodorovný posuvník.

# Kód použitý k vygenerování tohoto příkladu

from gi.repository import Gtk import sys

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="TextView Example", application=app) self.set_default_size(300, 450)

# Posuvníky pro synovský widget (což bude TextView) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_border_width(5) # Posuvníky zobrazit jen v případě potřeby scrolled_window.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)

# Textová vyrovnávací paměť (uchovává text) buffer1 = Gtk.TextBuffer()

# TextView (zobrazuje obsah vyrovnávací paměti) textview = Gtk.TextView(buffer=buffer1) # wrap the text, if needed, breaking lines in between words textview.set_wrap_mode(Gtk.WrapMode.WORD)

# TextView má posuvníky scrolled_window.add(textview)

self.add(scrolled_window)

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): Gtk.Application.do_startup(self)

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Užitečné metody pro widget TextView

`Gtk.TextView` zobrazuje text uchovávaný v `Gtk.TextBuffer`. Většina zásahů do textu je však prováděna pomocí iterátorů představovaných objektem `Gtk.TextIter` – pozicí mezi dvěma znaky v textové vyrovnávací paměti. Iterátory nemají trvalou platnost. Vždy, když dojde ke změně ve vyrovnávací paměti způsobem, který ovlivní obsah, stanou se všechny zasažené iterátory neplatnými. Z tohoto důvodu nelze iterátory použít k uchování pozic mezi změnami vyrovnávací paměti. K uchování pozice použijeme značky `Gtk.TextMark`, které lze zviditelnit pomocí `visible(True)`. Textová vyrovnávací paměť obsahuje dvě vestavěné značky. Značku „insert“ (pozice kurzoru) a „selection_bound“ (hranice výběru).

Metody pro widget TextView:

Widget `TextView` umožňuje ve výchozím stavu úpravy. Pokud požadujete opak, použijte `set_editable(False)`. Pokud vyrovnávací paměť nemá upravitelný text, je dobrý nápad také použít `set_cursor_visible(False)` ke skrytí kurzoru.

Zarovnání textu se nastavuje pomocí `set_justification(Gtk.Justification.JUSTIFICATION)`, kde `JUSTIFICATION` je něco z `LEFT, RIGHT, CENTER, FILL`.

Zalamování textu se nastavuje pomocí `set_wrap_mode(Gtk.WrapMode.WRAP)`, kde `WRAP` je jedno z `NONE` (textová oblast bude rozšířena), `CHAR` (řádky se zalamují, kdekoliv se může vyskytnout kurzor), `WORD` (řádky se zalamují za celými slovy), `WORD_CHAR` (řádky se zalamují mezi slovy, ale když to není možné, tak i mezi znaky).

Metody pro widget TextBuffer:

`get_insert()` vrací `Gtk.TextMark`, který představuje kurzor, což je místo vkládání.

`get_selection_bound()` vrací `Gtk.TextMark`, který představuje hranice výběru.

`set_text("nějaký text", délka)`, kde `délka` je celé kladné číslo nebo `-1`, nastaví obsah vyrovnávací paměti prvních `délka` znaků z textu `"nějaký text"`. Jestliže je `délka` vynechána nebo `-1`, je text vložen celý. Pokud byl ve vyrovnávací paměti před tím nějaký obsah, je zlikvidován.

`insert(iterátor, "nějaký text", délka)`, kde `iterárot` je textový iterátor a `délka` je celé kladné číslo nebo `-1`, vloží do vyrovnávací paměti na pozici danou `iterátorem` prvních `délka` znaků z textu `"nějaký text"`. Jestliže je `délka` vynechána nebo je `-1`, je text vložen celý.

`insert_at_cursor("nějaký text", délka)` dělá to stejné, co `insert(iterátor, "nějaký text", délka)` s tím, že aktuální kurzor se vezme jako `iterátor`.

`create_mark("název_značky", iterátor, přitahovat_vlevo)`, kde `iterátor` je `Gtk.TextIter` a `přitahovat_vlevo` je pravdivostní hodnota, vytvoří značku `Gtk.TextMark` na pozici `iterátor`. Pokud je `"název_značky"` zadán jako `None`, je značka anonymní, v opačném případě ji lze získat pomocí `get_mark()`. Když je přitahována vlevo, a na místo aktuální značky je vkládán text, posouvá se značka nalevo od nově vkládaného textu. V případe, že je `přitahovat_vlevo` vynecháno, je výchozí hodnotou `False`.

Abyste nějakému textu ve vyrovnávací paměti určili konkrétní formát, musíte nadefinovat značku (`tag`), která si bude pamatovat formátovací informace, a pak ji použít na úsek textu pomocí `create_tag("název značky", vlastnost)` a `apply_tag(značka, iterátor_počátku, iterátor_konce)`. Například:

tag = textbuffer.create_tag("orange_bg", background="orange") textbuffer.apply_tag(tag, start_iter, end_iter)

Následují některé obvyklé styly používané u textu:

Barva pozadí (vlastnost „background“)

Barva popředí (vlastnost „foreground“)

Podtržení (vlastnost „underline“)

Tučné (vlastnost „weight“)

Kurzíva (vlastnost „style“)

Přeškrtnutí (vlastnost „strikethrouhg“)

Zarovnání (vlastnost „justification“)

Velikost (vlastnosti „size“ a „size-points“)

Zalamování textu (vlastnost „wrap-mode“)

Můžete také dodatečně konkrétní značky smazat pomocí `remove_tag()` nebo smazat všechny značky v zadané oblasti zavoláním `remove_all_tags()`.

Metody pro widget TextIter

`forward_search(co_hledat, příznaky, omezení)` hledá směrem od začátku ke konci `co_hledat`. Hledání nepokračuje při při dosažení omezení `Gtk.TextIter`. Parametr `příznaky` může být nastaven na něco z následujícího, případně i na kombinaci více možností pospojovaných bitovým operátorem OR `|`: `0` (musí se shodovat přesně), `Gtk.TextSearchFlags.VISIBLE_ONLY` (nalezená shoda může být oproti hledanému proložená neviditelným textem), `Gtk.TextSearchFlags.TEXT_ONLY` (nalezená shoda může mít uvnitř obrázky nebo jiné synovské widgety), `Gtk.TextSearchFlags.CASE_INSENSITIVE` (text bude porovnáván bez ohledu na velikost písmen). Metoda vrací dvojici obsahující `Gtk.TextIter` ukazující na začátek shody a na první znak za shodu. Pokud není nic nalezeno, je vráceno `None`.

`backward_search(co_hledat, příznaky, omezení)` dělá to stejné jako `forward_search()`, akorát směrem od konce k začátku.

# Odkazy k API

V této ukázce se používá následující:

GtkTextView

GtkTextBuffer

GtkTextTag

GtkScrolledWindow

Standardní výčtové konstanty