# Προβολή κειμένου (TextView) (Python)

Sebastian Pölsterl
sebp@k-d-w.org 2011
Marta Maria Casetti
mmcasetti@gmail.com 2012
Γραφικό στοιχείο που εμφανίζει ένα GtkTextBuffer
Ελληνική μεταφραστική ομάδα GNOME
team@gnome.gr 2012-2015
Δημήτρης Σπίγγος
dmtrs32@gmail.com 2012, 2013
Μαρία Θουκιδίδου
marablack3@gmail.com 2014
Θάνος Τρυφωνίδης
tomtryf@gmail.com 2014, 2015

# Προβολή κειμένου (TextView)

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

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

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

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

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

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

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

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)

# a scrollbar for the child widget (that is going to be the textview) scrolled_window = Gtk.ScrolledWindow() scrolled_window.set_border_width(5) # we scroll only if needed scrolled_window.set_policy( Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)

# a text buffer (stores text) buffer1 = Gtk.TextBuffer()

# a textview (displays the buffer) textview = Gtk.TextView(buffer=buffer1) # wrap the text, if needed, breaking lines in between words textview.set_wrap_mode(Gtk.WrapMode.WORD)

# textview is scrolled 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)

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

Μια `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

Standard Enumerations