如何在Gtk textview中添加新行?

时间:2016-11-25 00:02:26

标签: python python-3.x gtk newline gtk3

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

这应该是我的问题的可重现版本,然后我的输出......(ps。我不是一个有经验的程序员)

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窗口中的当前输出:

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

Gtk窗口中的所需输出:

 'a'
 'b'
 'c'

3 个答案:

答案 0 :(得分:4)

添加到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")

您也可以插入:

答案 1 :(得分: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

答案 2 :(得分: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)) 

这会在不同的行上打印“标题”,“作者”和“来源”。