I am trying to render text in the TreeView for Hebrew Language.
Since the Hebrew text is from RTL (Right to Left Language) I am using a marker '\u200f' to make the text appear from right to left.
Below is the code where I am trying to render the Hebrew text
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()
Need help to render the text from Right to Left in the Tree View
You can not set a CellRenderer
's property directly, like you do in commented lines. Instead, you set TreeColumn
's attribute, which tells renderer, where it can get value for property. Thus, you should add extra fields in your liststore and put xalign
value there.
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()
tested only on python 3