Уменьшить размер поля редактирования в CellRendererText в Gtk + Python - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь уменьшить размер поля редактирования, которое появляется при редактировании ячейки дерева в Gtk + Python.

Вот мой код:

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

class CellRendererTextWindow(Gtk.Window):

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

        self.set_default_size(200, 200)

        self.liststore = Gtk.ListStore(str, str)
        self.liststore.append(["Fedora", "http://fedoraproject.org/"])
        self.liststore.append(["Slackware", "http://www.slackware.com/"])
        self.liststore.append(["Sidux", "http://sidux.com/"])

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

        select_render = Gtk.CellRendererToggle()
        select_render.set_property('activatable', True)
        select_render.set_property("radio", True)
        select_render.connect('toggled', self.on_toggle)
        select_column = Gtk.TreeViewColumn(" %s" %('Select'), select_render,    
        active=0)
        select_column.set_clickable(True)
        treeview.append_column(select_column)

        renderer_text = Gtk.CellRendererText()
        renderer_text.set_property("editable", True)
        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)

        self.add(treeview)

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

    def on_toggle(self, cell, path):
        print "Toggled"

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

Вот вывод этого кода:

output

Когда я пытаюсь изменить ячейку, она выглядит так:

edit cell

То, что я хочу, это то, что я хочу уменьшить размер этого поля редактирования, которое появляется при редактировании ячейки, потому что оно перекрывает другие ячейки строки. Я хочу, чтобы это поле редактирования появилось в пределах ширины столбца. Обратите внимание, что я не хочу повлиять на размер столбца или ячейки в этом порядке.

Я пытался установить различные свойства, такие как: width, width-chars, max-width-chars и т. Д.

max-width-chars оказывает некоторое влияние, но затем также уменьшает размер столбца.

Раньше это происходило в gtk2, но в Gtk3 + это оказывает такое влияние.

У кого-нибудь есть какое-нибудь решение для этого? Я действительно застрял с этим.

1 Ответ

0 голосов
/ 04 мая 2018

Поле редактирования текста средства визуализации ячеек gtk имеет фиксированную ширину.

Таким образом, при распределении каждого столбца с некоторым пространством перекрытие поля редактирования не произойдет.

Здесь, в вашем коде, я просто увеличиваю ширину окна, таким образом cellrendererText получает достаточно места, чтобы открыть окно редактирования, не перекрывая его с другим полем

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

class CellRendererTextWindow(Gtk.Window):

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

        self.set_default_size(400, 200)

        self.liststore = Gtk.ListStore(str, str)
        self.liststore.append(["Fedora", "http://fedoraproject.org/"])
        self.liststore.append(["Slackware", "http://www.slackware.com/"])
        self.liststore.append(["Sidux", "http://sidux.com/"])

        treeview = Gtk.TreeView(model=self.liststore)
        treeview.set_grid_lines(Gtk.TreeViewGridLines.BOTH)

        select_render = Gtk.CellRendererToggle()
        select_render.set_property('activatable', True)
        select_render.set_property("radio", True)
        select_render.connect('toggled', self.on_toggle)
        select_column = Gtk.TreeViewColumn(" %s" %('Select'), select_render, active=0)
        select_column.set_clickable(True)
        treeview.append_column(select_column)

        renderer_text = Gtk.CellRendererText()
        renderer_text.set_property("editable", True)
        column_text = Gtk.TreeViewColumn("Text", renderer_text, text=0)
        column_text.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
        column_text.set_expand(True)
        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)

        self.add(treeview)

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

    def on_toggle(self, cell, path):
        print "Toggled"

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

Вот вывод

...