GTK3+ TextView 添加每行不同颜色的文本行
GTK3+ TextView add lines of text with different colors per line
我现在有点困惑,我使用 TextView 作为状态日志,每当有事情发生时都会添加新行,这是我为此使用的功能,可能不正确但它确实有效但我不能让它添加改变整条线的颜色。
def logtostatus(self, text):
tvLog = self.tabs['Status'][1].get_children()[0].get_children()[0]
buf = tvLog.get_buffer()
start = buf.get_end_iter()
buf.insert(start, text+"\n")
end = buf.get_end_iter()
这确实会插入文本,我有多个版本试图使用 TextTag,但它拒绝工作,所以因为我 运行 没有想法,我请求你们所有人,请帮助,这是快把我逼疯了。
谢谢
这对我有用:
from gi.repository import Gtk
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
tb = Gtk.TextBuffer()
tv = Gtk.TextView(buffer = tb)
for color in ("red", "yellow", "green", "blue", "white"):
tb.insert_markup(
tb.get_end_iter(),
'<span color="{:s}">This is a test message</span>\n'.format(color),
-1)
self.add(tv)
self.show_all()
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
这似乎是玩转颜色最简单的方法。这是结果:
我现在有点困惑,我使用 TextView 作为状态日志,每当有事情发生时都会添加新行,这是我为此使用的功能,可能不正确但它确实有效但我不能让它添加改变整条线的颜色。
def logtostatus(self, text):
tvLog = self.tabs['Status'][1].get_children()[0].get_children()[0]
buf = tvLog.get_buffer()
start = buf.get_end_iter()
buf.insert(start, text+"\n")
end = buf.get_end_iter()
这确实会插入文本,我有多个版本试图使用 TextTag,但它拒绝工作,所以因为我 运行 没有想法,我请求你们所有人,请帮助,这是快把我逼疯了。
谢谢
这对我有用:
from gi.repository import Gtk
class MainWindow(Gtk.Window):
def __init__(self):
super(MainWindow, self).__init__()
self.connect("destroy", lambda x: Gtk.main_quit())
tb = Gtk.TextBuffer()
tv = Gtk.TextView(buffer = tb)
for color in ("red", "yellow", "green", "blue", "white"):
tb.insert_markup(
tb.get_end_iter(),
'<span color="{:s}">This is a test message</span>\n'.format(color),
-1)
self.add(tv)
self.show_all()
def run(self):
Gtk.main()
def main(args):
mainwdw = MainWindow()
mainwdw.run()
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv))
这似乎是玩转颜色最简单的方法。这是结果: