GTK3 在 TreeView 中为 RTL 语言(如希伯来语)渲染文本

德鲁巴约蒂·多利

我正在尝试在希伯来语语言的 TreeView 中呈现文本。

由于希伯来语文本来自 RTL(从右到左语言),我使用标记 '\u200f' 使文本从右向左显示。

下面是我试图呈现希伯来语文本的代码

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Pango

class CellRendererTextWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="CellRendererText Example")

        self.set_default_size(200, 200)
        a = u'\u200f\u202b<span float="right" foreground="black">\u05d1\u05d5\u05d0\u05d5 \u05d9\u05d7\u05d3 \u05d0\u05e8\u05d5\u05d7\u05ea \u05e6\u05d4\u05e8\u05d9\u05d9\u05dd</span>\u202c'
        self.liststore = Gtk.ListStore(str, str)

        treeview = Gtk.TreeView(model=self.liststore)

        renderer_text = Gtk.CellRendererText()
        #renderer_text.set_property("xalign", 1.0)
        #renderer_text.set_property("ellipsize", Pango.EllipsizeMode.START)


        column_text = Gtk.TreeViewColumn("Text", renderer_text, text=0)
        treeview.append_column(column_text)

        renderer_editabletext = Gtk.CellRendererText()
        renderer_editabletext.set_property("editable", True)

        column_editabletext = Gtk.TreeViewColumn("Editable Text",
            renderer_editabletext, text=1)
        treeview.append_column(column_editabletext)

        renderer_editabletext.connect("edited", self.text_edited)

        textview = Gtk.TextView()
        textbuffer = textview.get_buffer()
        textbuffer.set_text(a)

        self.liststore.append(["Test", a])
        self.liststore.append([a, "http://fedoraproject.org/"])
        self.liststore.append(["Slackware"*10, "http://www.slackware.com/"])
        self.liststore.append(["Sidux", "http://sidux.com/"])

        self.add(treeview)

    def text_edited(self, widget, path, text):
        self.liststore[path][1] = text

win = CellRendererTextWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

需要帮助在树视图中从右到左呈现文本

亚历山大·德米特里耶夫

您不能CellRenderer像在注释行中那样直接设置 a的属性。相反,您设置TreeColumn的属性,它告诉渲染器它可以从何处获取 property 的值因此,您应该在列表存储中添加额外的字段并将xalign放在那里。

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from gi.repository import Pango

class CellRendererTextWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="CellRendererText Example")

        self.set_default_size(200, 200)
        a = u'<span lang="he" foreground="black">abc \u05d1\u05d5\u05d0\u05d5 \u05d9\u05d7\u05d3 \u05d0\u05e8\u05d5\u05d7\u05ea \u05e6\u05d4\u05e8\u05d9\u05d9\u05dd</span>\u202c'

        self.liststore = Gtk.ListStore(str, str, float, str)

        treeview = Gtk.TreeView(model=self.liststore)

        renderer_text = Gtk.CellRendererText()
        column_text = Gtk.TreeViewColumn("text", renderer_text)
        column_text.add_attribute (renderer_text, "markup", 0)
        column_text.add_attribute(renderer_text, "xalign", 2)
        column_text.add_attribute(renderer_text, "background", 3)
        treeview.append_column(column_text)


        rend_editable = Gtk.CellRendererText()
        rend_editable.set_property("editable", True)

        column_editabletext = Gtk.TreeViewColumn("Editable Text", rend_editable)
        column_editabletext.add_attribute(rend_editable, "text", 1)
        treeview.append_column(column_editabletext)

        rend_editable.connect("edited", self.text_edited)

        textview = Gtk.TextView()
        textbuffer = textview.get_buffer()
        textbuffer.set_text(a)

        self.liststore.append(["Test", a, 1.0, "white"])
        self.liststore.append([a, "http://fedoraproject.org/", 1.0, "red"])
        self.liststore.append(["Slackware" * 6, "http://www.slackware.com/", 0.5, "green"])
        self.liststore.append(["Sidux", "http://sidux.com/", 0.5, "blue"])

        self.add(treeview)

    def text_edited(self, widget, path, text):
        self.liststore[path][1] = text

win = CellRendererTextWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

仅在 python 3 上测试

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章