如何在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
答
添加到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
)等...
谢谢,这做了部分工作,但不完全,因为我的实际代码竟然是一个更复杂一点! – Fliss
您可以编辑您的问题并更新您的代码的复杂程度,我会更新我的答案以帮助您。别客气 –