如何在Gtk textview中添加新行?

问题描述:

这是我的问题,我无法在其他地方找到答案。我想在Gtk textview(python3)中显示一些文本,并在每段文本之后换行。当我使用“\ n”时,它显示“\ n”而不是实际添加新行。有没有办法可以解决这个问题?如何在Gtk textview中添加新行?

这应该是我的问题的可重复的版本,然后我的输出...用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() 

电流输出(PS我不是一个有经验的程序员。):

('a','\n','b', '\n', 'c') 
用GTK窗口

所需的输出:

'a' 
'b' 
'c' 

我已经通过使用%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)) 

这版画“标题”,“作者”和线“源代码”。

你需要加入的数据在一个名为变量在像这样的字符串:

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

您可以编辑您的问题并更新您的代码的复杂程度,我会更新我的答案以帮助您。别客气 –

添加到textbuffer,而不首先读取它,可使用iters(其排序的点来实现缓冲区的内容)。在开始(get_start_iter)在一定

  • 偏移量(以字符)插入:例如,你可以在缓冲区的末尾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_iter_at_offset

  • 在某行()
  • 在一定的“标记”你在文本离开(get_iter_at_mark)等...