# TextView (Python)

Sebastian Pölsterl
sebp@k-d-w.org 2011
Marta Maria Casetti
mmcasetti@gmail.com 2012
Γραφικό συστατικό που εμφανίζει ένα GtkTextBuffer

# TextView

Αυτό είναι ένα παράδειγμα του Gtk.TextView.

Εάν πατήσετε "enter", έχουμε νέα γραμμή.

Αλλά μπορούμε επίσης να έχουμε μια νέα γραμμή εάν γράψουμε μια μεγάλη πρόταση (το κείμενο θα αναδιπλωθεί διακόπτοντας τις γραμμές μεταξύ των λέξεων).

Εάν έχουμε μια μεγάαααααααααααααααααααααααααααααααλη

(που ήταν μεγάλη)

λέξη, μια οριζόντια γραμμή κύλισης θα εμφανιστεί.

# Ο χρησιμοποιούμενος κώδικας για παραγωγή αυτού παραδείγματος

# Χρήσιμες μέθοδοι για ένα γραφικό συστατικό TextView

Μια εξήγηση πώς να αντιμετωπίσετε τις συμβολοσειρές και Unicode (και μια ανακεφαλαίωση του τι αυτά τα πράγματα είναι) μπορεί να βρεθεί εδώ.

Μια `Gtk.TextView` εμφανίζει το αποθηκευμένο κείμενο σε μια `Gtk.TextBuffer`. Όμως, η περισσότερη επεξεργασία του κειμένου πραγματοποιείται με επαναλήπτες, αντιπροσωπευόμενοι από ένα `Gtk.TextIter` - μια θέση μεταξύ δύο χαρακτήρων στην ενδιάμεση μνήμη του κειμένου. Οι επαναλήπτες δεν είναι έγκυροι επ' άπειρο· όποτε η ενδιάμεση μνήμη τροποποιείται με τρόπο που επηρεάζει τα περιεχόμενα της ρυθμιστικής μνήμης, όλοι οι εκκρεμείς επαναλήπτες γίνονται άκυροι. Λόγω αυτού, οι επαναλήπτες δεν μπορούν να χρησιμοποιηθούν για να διατηρήσουν τις θέσεις με τις τροποποιήσεις της ενδιάμεσης μνήμης. Για να διατηρήσετε μια θέση, χρησιμοποιούμε ένα `Gtk.TextMark`, που μπορεί να οριστεί ορατό με `visible(True)`. Μια ενδιάμεση μνήμη κειμένου περιέχει δύο ενσωματωμένα σημάδια· ένα σημάδι "εισαγωγής" (η θέση του δρομέα) και το σημάδι "δέσμευση_επιλογής".

Μέθοδοι για ένα γραφικό συστατικό TextView:

Το γραφικό συστατικό TextView είναι από προεπιλογή επεξεργάσιμο. Εάν προτιμάτε αλλιώς, χρησιμοποιήστε `set_editable(False)`. Εάν η ενδιάμεση μνήμη δεν έχει επεξεργάσιμο κείμενο, ίσως να είναι μια καλή ιδέα να χρησιμοποιήσετε `set_cursor_visible(False)` επίσης.

Η στοίχιση του κειμένου ορίζεται με `set_justification(Gtk.Justification.JUSTIFICATION)` όπου `JUSTIFICATION` είναι ένα από τα `LEFT, RIGHT, CENTER, FILL`.

Η αναδίπλωση γραμμής του κειμένου ορίζεται με `set_wrap_mode(Gtk.WrapMode.WRAP)` όπου `WRAP` είναι ένα από `NONE` (η περιοχή του κειμένου γίνεται πλατύτερη), `CHAR` (η αλλαγή γραμμών οπουδήποτε ο δρομέας μπορεί να εμφανιστεί), `WORD` (αλλαγή γραμμών μεταξύ λέξεων), `WORD_CHAR` (αλλαγή γραμμών μεταξύ λέξεων, αλλά εάν αυτό δεν είναι αρκετό μεταξύ χαρακτήρων).

Μέθοδοι για ένα γραφικό συστατικό TextBuffer:

Η `get_insert()` επιστρέφει το `Gtk.TextMark` που αναπαριστά τον δρομέα, που είναι το σημείο εισαγωγής.

Η `get_selection_bound()` επιστρέφει το `Gtk.TextMark` που αναπαριστά την δεσμευμένη επιλογή.

Ο `set_text("some text", length)` όπου `length` είναι ένας θετικός ακέραιος ή `-1`, ορίζει το περιεχόμενο της ενδιάμεσης μνήμης ως τους πρώτους χαρακτήρες `length` του κειμένου `"some text"`. Εάν το `length` παραλείπεται ή `-1`, το κείμενο εισάγεται πλήρως. Το περιεχόμενο της ενδιάμεσης μνήμης, εάν υπάρχει κάποια, καταστρέφεται.

Η `insert(iter, "some text", length)` όπου `iter` είναι ένας επαναλήπτης κειμένου και `length` είναι ένας θετικός ακέραιος ή `-1`, εισάγει στην ενδιάμεση μνήμη στο `iter` τους πρώτους χαρακτήρες `length` του κειμένου `"some text"`. Εάν το `length` παραληφθεί ή `-1`, το κείμενο εισάγεται πλήρως.

Η `insert_at_cursor("some text", length)` κάνει το ίδιο με την `insert(iter, "some text", length)`, με τον τρέχοντα δρομέα να λαμβάνεται ως `iter`.

Η `create_mark("mark_name", iter, left_gravity)` όπου `iter` είναι ένα `Gtk.TextIter` και `left_gravity` είναι τιμή Μπουλ, δημιουργεί ένα `Gtk.TextMark` στη θέση του `iter`. Εάν `"mark_name"` είναι `None`, το σημάδι είναι ανώνυμο· αλλιώς, το σημάδι μπορεί να ανακτηθεί κατά όνομα χρησιμοποιώντας `get_mark()`. Εάν ένα σημάδι έχει υπολειπόμενη βαρύτητα και το κείμενο εισάγεται στην τρέχουσα θέση του σημαδιού, το σημάδι θα μετακινηθεί στα αριστερά του νεοεισαγμένου κειμένου. Εάν η `left_gravity` παραληφθεί, προεπιλέγεται το `False`.

Για να ορίσετε ότι κάποιο κείμενο στην ενδιάμεση μνήμη πρέπει να έχει ειδική μορφοποίηση, πρέπει να ορίσετε μια ετικέτα να κρατήσει αυτήν την πληροφορία μορφοποίησης και έπειτα να εφαρμόσει αυτήν την ετικέτα στην περιοχή του κειμένου χρησιμοποιώντας `create_tag("tag name", property)` και `apply_tag(tag, start_iter, end_iter)` όπως στο, για παράδειγμα:

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

Τα ακόλουθα είναι μερικές από τις κοινές εφαρμοζόμενες τεχνοτροπίες στο κείμενο:

Χρώμα παρασκηνίου (ιδιότητα "background")

Χρώμα προσκηνίου (ιδιότητα "foreground")

Υπογράμμιση (ιδιότητα "underline")

Έντονα (ιδιότητα "weight")

Πλάγια (ιδιότητα "style")

Διαγράμμιση (ιδιότητα "strikethrough")

Στοίχιση (ιδιότητα "justification")

Μέγεθος (ιδιότητες "size" και "size-points")

Αναδίπλωση κειμένου (ιδιότητα "wrap-mode")

Μπορείτε επίσης να διαγράψετε συγκεκριμένες ετικέτες αργότερα χρησιμοποιώντας `remove_tag()` ή να διαγράψετε όλες τις ετικέτες σε μια δεδομένη περιοχή καλώντας `remove_all_tags()`.

Μέθοδοι για γραφικό συστατικό TextIter

Η `forward_search(needle, flags, limit)` αναζητά μπροστά για `needle`. Η αναζήτηση δεν θα συνεχίσει πέρα από το όριο `Gtk.TextIter`. Οι `flags` μπορούν να οριστούν σε ένα από τα ακόλουθα, ή οποιονδήποτε συνδυασμό του συνενώνοντας τους με τον τελεστή OR `|`: `0` (η συμφωνία πρέπει να είναι ακριβής)· `Gtk.TextSearchFlags.VISIBLE_ONLY` (η συμφωνία μπορεί να έχει αόρατο κείμενο διανθισμένο σε βελόνα)· `Gtk.TextSearchFlags.TEXT_ONLY` (η συμφωνία μπορεί να έχει γραφικά συστατικά pixbufs ή θυγατρικά ανακατεμένα μέσα στην περιοχή συμφωνίας)· το `Gtk.TextSearchFlags.CASE_INSENSITIVE` (το κείμενο θα ταιριάζει ανεξάρτητα από κεφαλαία/μικρά). Η μέθοδος επιστρέφει μια πλειάδα που περιέχει ένα `Gtk.TextIter` που δείχνει στην αρχή και στον πρώτο χαρακτήρα μετά τη συμφωνία· εάν δεν βρεθεί συμφωνία, ο `None` επιστρέφεται.

Η `backward_search(needle, flags, limit)` κάνει το ίδιο όπως η `forward_search()`, αλλά κινείται προς τα πίσω.

# Αναφορές API

Σε αυτό το παράδειγμα χρησιμοποιήσαμε τα παρακάτω:

GtkTextView

GtkTextBuffer

GtkTextTag

GtkScrolledWindow

Τυπικές απαριθμήσεις