Представление текста

Для создания виджета TextView существует только одна функция:

  textview = gtk.TextView(buffer=None)

Когда TextView создаётся, то по умолчанию он создаёт связанные с ним TextBuffer и TextTagTable. Если вы хотите использовать существующий TextBuffer в TextView, то укажите его в методе, показанном выше. Для того чтобы заменить TextBuffer в используемом TextView, используйте следущий метод:

  textview.set_buffer(buffer)

Используйте следующий метод для получения ссылки на TextBuffer из TextView:

  buffer = textview.get_buffer()

Виджет TextView не имеет полос прокрутки на случай если текст не будет помещаться в окно. Для того чтобы получить полосы прокрутки, добавьте TextView на ScrolledWindow (см. Раздел 10.9, “Окно прокрутки (gtk.ScrolledWindow)”).

TextViewможет быть использован для того чтобы позволить пользователю редактировать текст, или для того чтобы отобразить многострочный текст только для чтения. Для переключения между режимами, используйте следующий метод:

  textview.set_editable(setting)

Аргумент setting может принимать значение TRUE или FALSE, которое указывает разрешено ли пользователю редактировать содержимое TextView. Режим редактирования также может быть установлен и для отрывков текста, с помощью TextTag.

Вы можете получить текущее значение этой настройки с помощью метода:

  setting = textview.get_editable()

Когда TextView защищён от записи, вы можете спрятать курсор с помощью метода:

  textview.set_cursor_visible(setting)

Аргумент setting может принимать значение TRUE или FALSE, что влияет на то, будет ли видим курсор или нет. TextView может разбивать слишком длинные строки текста. По умолчанию он этого не делает. Это может быть изменено с помощью метода:

  textview.set_wrap_mode(wrap_mode)

Этот метод позволяет вам указать что виджет должен разбивать длинные строки по словам или посимволько. Аргумент word_wrap может принимать:

  gtk.WRAP_NONE
  gtk.WRAP_CHAR
  gtk.WRAP_WORD

Выравнивание текста в TextView может быть выбрано с помощью методов:

  textview.set_justification(justification)
  justification = textview.get_justification()

где justification принимает значение:

  gtk.JUSTIFY_LEFT
  gtk.JUSTIFY_RIGHT
  gtk.JUSTIFY_CENTER

Note

justification будет равым JUSTIFY_LEFT если wrap_mode установлен в WRAP_NONE. gtk.TextTag может перекрывать justification.

Другие значения , такие как левое поле, правое поле, табуляция и абзацы, могут быть настроены или получены из TextView с помощью следующих методов:

  textview.set_left_margin(left_margin)
  left_margin = textview.get_left_margin()

  textview.set_right_margin(right_margin)
  right_margin = textview.get_right_margin()

  textview.set_indent(indent)
  indent = textview.get_indent()

  textview.set_pixels_above_lines(pixels_above_line)
  pixels_above_line = textview.get_pixels_above_lines()

  textview.set_pixels_below_lines(pixels_below_line)
  pixels_below_line = textview.get_pixels_below_lines()

  textview.set_pixels_inside_wrap(pixels_inside_wrap)
  pixels_inside_wrap = textview.get_pixels_inside_wrap()

  textview.set_tabs(tabs)
  tabs = textview.get_tabs()

left_margin, right_margin, indent, pixels_above_lines, pixels_below_lines и pixels_inside_wrap указываются в пикселях. Значения могут быть замещены для отрезков текста с помощью gtk.TextTag..

Пример textview-basic.py показывает основы использовния виджета TextView:

Рисунок 13.1. Пример простого TextView

Basic TextView Example

Исходный код:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# пример textview-basic.py

import pygtk
pygtk.require('2.0')
import gtk

class TextViewExample:
    def toggle_editable(self, checkbutton, textview):
        textview.set_editable(checkbutton.get_active())

    def toggle_cursor_visible(self, checkbutton, textview):
        textview.set_cursor_visible(checkbutton.get_active())

    def toggle_left_margin(self, checkbutton, textview):
        if checkbutton.get_active():
            textview.set_left_margin(50)
        else:
            textview.set_left_margin(0)

    def toggle_right_margin(self, checkbutton, textview):
        if checkbutton.get_active():
            textview.set_right_margin(50)
        else:
            textview.set_right_margin(0)

    def new_wrap_mode(self, radiobutton, textview, val):
        if radiobutton.get_active():
            textview.set_wrap_mode(val)

    def new_justification(self, radiobutton, textview, val):
        if radiobutton.get_active():
            textview.set_justification(val)

    def close_application(self, widget):
        gtk.main_quit()

    def __init__(self):
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_resizable(True)
        window.connect("destroy", self.close_application)
        window.set_title("Пример основного виджета TextView")
        window.set_border_width(0)

        box1 = gtk.VBox(False, 0)
        window.add(box1)
        box1.show()

        box2 = gtk.VBox(False, 10)
        box2.set_border_width(10)
        box1.pack_start(box2, True, True, 0)
        box2.show()

        sw = gtk.ScrolledWindow()
        sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
        textview = gtk.TextView()
        textbuffer = textview.get_buffer()
        sw.add(textview)
        sw.show()
        textview.show()

        box2.pack_start(sw)
        # Загружаем файл textview-basic.py в текстовое окно
        infile = open("textview-basic.py", "r")

        if infile:
            string = infile.read()
            infile.close()
            textbuffer.set_text(string)

        hbox = gtk.HButtonBox()
        box2.pack_start(hbox, False, False, 0)
        hbox.show()

        vbox = gtk.VBox()
        vbox.show()
        hbox.pack_start(vbox, False, False, 0)
        # Переключатель режима редактирования
        check = gtk.CheckButton("Editable")
        vbox.pack_start(check, False, False, 0)
        check.connect("toggled", self.toggle_editable, textview)
        check.set_active(True)
        check.show()
        # Переключатель видимости курсора
        check = gtk.CheckButton("Cursor Visible")
        vbox.pack_start(check, False, False, 0)
        check.connect("toggled", self.toggle_cursor_visible, textview)
        check.set_active(True)
        check.show()
        # Перключатель для левого поля
        check = gtk.CheckButton("Left Margin")
        vbox.pack_start(check, False, False, 0)
        check.connect("toggled", self.toggle_left_margin, textview)
        check.set_active(False)
        check.show()
        # Переключатель для правого поля
        check = gtk.CheckButton("Right Margin")
        vbox.pack_start(check, False, False, 0)
        check.connect("toggled", self.toggle_right_margin, textview)
        check.set_active(False)
        check.show()
        # Переключатели режима переноса строк
        vbox = gtk.VBox()
        vbox.show()
        hbox.pack_start(vbox, False, False, 0)
        radio = gtk.RadioButton(None, "WRAP__NONE")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_wrap_mode, textview, gtk.WRAP_NONE)
        radio.set_active(True)
        radio.show()
        radio = gtk.RadioButton(radio, "WRAP__CHAR")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_wrap_mode, textview, gtk.WRAP_CHAR)
        radio.show()
        radio = gtk.RadioButton(radio, "WRAP__WORD")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_wrap_mode, textview, gtk.WRAP_WORD)
        radio.show()

        # Переключатели для выравнивания
        vbox = gtk.VBox()
        vbox.show()
        hbox.pack_start(vbox, False, False, 0)
        radio = gtk.RadioButton(None, "JUSTIFY__LEFT")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_justification, textview,
                      gtk.JUSTIFY_LEFT)
        radio.set_active(True)
        radio.show()
        radio = gtk.RadioButton(radio, "JUSTIFY__RIGHT")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_justification, textview,
                      gtk.JUSTIFY_RIGHT)
        radio.show()
        radio = gtk.RadioButton(radio, "JUSTIFY__CENTER")
        vbox.pack_start(radio, False, True, 0)
        radio.connect("toggled", self.new_justification, textview,
                      gtk.JUSTIFY_CENTER)
        radio.show()

        separator = gtk.HSeparator()
        box1.pack_start(separator, False, True, 0)
        separator.show()

        box2 = gtk.VBox(False, 10)
        box2.set_border_width(10)
        box1.pack_start(box2, False, True, 0)
        box2.show()

        button = gtk.Button(None, gtk.STOCK_CLOSE)
        button.connect("clicked", self.close_application)
        box2.pack_start(button, True, True, 0)
        button.set_flags(gtk.CAN_DEFAULT)
        button.grab_default()
        button.show()
        window.show()

def main():
    gtk.main()
    return 0       

if __name__ == "__main__":
    TextViewExample()
    main()

Строки 10-34 отпределяют callback’и для переключателей. Строки 55-63 создают ScrolledWindow для размещения в нём TextView. ScrolledWindow размещается в VBox с переключателями, создаваемыми в строках 72-140. TextBuffer наполняется исходным кодом в строках 64-70.


Предыдущая страница На уровень выше  Следующая страница
Глава 13. Текстовый фреймворк (gtk.TextView) Оглавление  13.3. Текстовый буфер (gtk.TextBuffer)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>