2016-11-25 11 views
1

Вот моя проблема, я не могу найти ответ в другом месте. Я хочу показать некоторый текст в текстовом представлении Gtk (python3), с новой строкой после каждого фрагмента текста. Когда я использую «\ n», он показывает «\ n» вместо фактического добавления в новую строку. Есть ли способ, которым я могу это исправить?Как добавить новую строку в текстовое представление Gtk?

Это должно быть воспроизводимый версию моей проблемы, а затем мой выходной ...

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

records =() 
tv = Gtk.TextView() 

records += ("a", "\n", "b", "\n", "c", "\n") 
tb = tv.get_buffer() 
tb.set_text(str(records)) 

sw = Gtk.ScrolledWindow() 
sw.set_size_request(300,400) 
sw.add(tv) 

w = Gtk.Window() 
w.add(sw) 
w.show_all() 

Gtk.main() 

выходного тока в окне Gtk (PS Я не опытный программист.):

('a','\n','b', '\n', 'c') 

желаемый результат в окне Gtk:

'a' 
'b' 
'c' 

ответ

1

Мне был показан способ решить эту проблему, используя форматирование строки %s. Вот пример кода, я был на самом деле работает с:

tv = Gtk.TextView() 
    for record in records: 
     records_str += "Title: %s \nAuthors: %s \nSource: %s\n\n" %(record.get("TI"), ", ".join(record.get("AU")), record.get("SO")) 

    tb = tv.get_buffer() 
    tb.set_text("".join(records_str)) 

Это печатает «Заголовок», «Автор» и «Источник» на отдельных строках.

1

Вы должны присоединиться данные в переменную с именем records в одной строке, как это:

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

records =() 
tv = Gtk.TextView() 

records += ("a", "\n", "b", "\n", "c", "\n") 
tb = tv.get_buffer() 
# join in one single string 
tb.set_text("".join(records)) 


sw = Gtk.ScrolledWindow() 
sw.set_size_request(300,400) 
sw.add(tv) 

w = Gtk.Window() 
# Don't forget to connect your window's close button 
# to Gtk.main_quit signal, or whatever the signal you want 
w.connect("delete-event", Gtk.main_quit) 
w.add(sw) 
w.show_all() 

Gtk.main() 

Выход в пределах окна Gtk будет:

a 
b 
c 
+0

Спасибо, это частично работало, но не полностью, так как мой фактический код оказался немного сложнее! – Fliss

+0

Вы можете отредактировать свой вопрос и уточнить, насколько сложным является ваш код, и я обновлю свой ответ, чтобы помочь вам. Пожалуйста –

2

Добавление к textbuffer, не прочитав его первым, может быть осуществлено с использованием iters (что бы-точки к содержимое буфера). Например, вы можете добавить в конце буфера asking for an iter at the end:

bff = Gtk.TextBuffer() 
    view = Gtk.TextView(buffer = bff) 
    bff.set_text("This is the beginning\n") 

    iter = bff.get_end_iter() 
    bff.insert(iter, "And this is a newly inserted line\n") 

Вы также можете вставить:

  • в начале (get_start_iter)
  • на определенное смещение (в символах) в текст (get_iter_at_offset)
  • на определенной линии()
  • в некоторых «знаков» вы оставляете в тексте (get_iter_at_mark) и т. Д.

 Смежные вопросы

  • Нет связанных вопросов^_^