Отображение и редактирование текста и изображений в быстром приложении

Мне нужно иметь возможность отображать изображения и текст (изображения можно изменять и редактировать в тексте). Я думал, может быть, вещь типа HTML может сделать это. Для действительно плохого примера, например, как работает текстовый процессор. Ввод и редактирование текста, вставка и редактирование изображений.

Заранее спасибо, извините за невозможное (для меня) задание.

РЕДАКТИРОВАТЬ: Я также хотел бы быть в состоянии сохранить это как-то.

1
задан 21 June 2012 в 19:57

1 ответ

Вы можете сделать это, используя виджет TextView. Сначала вы должны установить для editable значение true:

textview.set_editable(true)

Вам нужно получить его текстовый буфер, который представляет собой данные textviews:

buffer = textview.get_buffer()

Затем, используя этот буфер, вы можете получить и установить данные в этом. чтобы получить текст, находящийся в данный момент в буфере, используйте:

buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), false)

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

buffer.insert(buffer.get_end_iter(), "Sample text")

Первый аргумент указывает, куда вставить текст, в данном случае в конце. Второй аргумент - это текст для вставки. Чтобы заменить все данные в буфере, вы можете использовать:

buffer.set_text("Sample text")

Это заменит все в буфере на «Образец текста». Чтобы вставить изображение, вам нужно создать pixbuf, чтобы сделать это, используя следующее:

pixbuf = gtk.gdk.pixbuf_new_from_file(filename)

Чтобы изменить размер pixbuf, используйте:

pixbuf.scale_simple(dest_width, dest_height, gtk.gdk.INTERP_BILINEAR)

Первые два аргумента - это новая ширина и высота, третий аргумент - это тип интерполяции, который управляет масштабированием (четыре типа можно найти здесь здесь ). Затем вы можете добавить этот pixbuf в буфер, используя:

buffer.insert_pixbuf(buffer.get_end_iter(), pixbuf)

Это вставит изображение в конец буфера.

Вы также можете делать такие вещи, как добавление виджетов, установка полей, копирование и вставка из буфера обмена, вставка курсора и т. Д., Но вы можете посмотреть ссылки ниже для этого.

Редактировать : Для форматированного сохранения / загрузки вы можете использовать метод сериализации текстовых буферов. Сначала вы должны использовать его метод register_serialize_tagset ():

format = buffer.register_serialize_tagset()

Затем вы можете использовать его метод сериализации для получения сериализованных данных:

data buffer.serialize(buffer, format, buffer.get_start_iter(), buffer.get_end_iter())

Это вернет данные во внутреннем формате текстового буфера , который вы можете сохранить в файл. Чтобы загрузить эти данные, сначала вызовите метод register_deserialize_tagset () textbuffer:

format = emptyBuffer.register_deserialize_tagset()

Затем вы можете загрузить данные, используя метод deserialize ():

emptyBuffer.deserialize(emptyBuffer, format, emptyBuffer.get_end_iter(), data)

Это загрузит данные в TextBuffer.

Edit2 : если вы хотите, чтобы пользователь мог перетаскивать, перемещать и изменять его размер, вам нужно вместо этого загрузить pixbuf в виджет изображения, виджет изображения в окно событий, окно событий в дочерний якорь для вставки в текстовое представление, вы можете обрабатывать x событий для этого виджета и писать код в обработчиках, которые будут перемещать или изменять размер изображения.

Ресурсы:

0
ответ дан 21 June 2012 в 19:57

Другие вопросы по тегам:

Похожие вопросы: