Отключить поведение минимального размера столбца TreeView - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть три виджета TreeView внутри двух вложенных виджетов Paned:

  • Paned (по горизонтали)
    • Paned (по вертикали)
      • TreeView
      • TreeView
    • TreeView

Другими словами, есть два TreeView слева и один справа, и все ониможет быть измененКроме того, все TreeViews находятся внутри ScrolledWindows с горизонтальной политикой полосы прокрутки, установленной на «never».

Оба TreeViews слева имеют только один столбец с текстом.Когда я перемещаю ползунок в панельных компонентах верхнего уровня, чтобы сделать два левых TreeViews меньшими, я ожидаю, что они будут обрезаны справа, если ширина слишком мала, чтобы уместить текст в столбцах.Вместо этого это выглядит так, как будто весь TreeView (оба) скользит влево, за пределы окна.Это очень нелогично, и, что еще более важно, скрыть расширители, которые являются первыми вещами, которые скрываются.

resize behavior

Как вы можете видеть на картинкевыше, когда я перетаскиваю вертикальный ползунок влево, столбцы в обоих TreeViews слева скользят «за пределы» окна;левая граница изображения также является левой границей окна.

Это поведение, по-видимому, зависит от максимального размера значений внутри столбца, то есть он начинает это "скольжение" только после самого длинного значениябольше не вписывается в область просмотра, поэтому выглядит так, как будто TreeView или столбец внутри него имеют некоторый минимальный размер, который другие компоненты не могут сжать.Однако на всякий случай я установил все потенциально релевантные минимальные размеры равными 0 (хотя он также не работает с отсутствующим минимальным размером по умолчанию).

Вместо этого поведения я хочу TreeView и его столбецбыть изменен, скрывая часть значения справа, если это необходимо.Но, похоже, я не могу найти ничего в документации Gtk или в интерфейсе Glade, которая бы мне помогла.

Я использую Python и pygobject / Gtk3, а также использую Glade для интерактивного создания интерфейса.

1 Ответ

0 голосов
/ 28 февраля 2019

Это (наиболее вероятно) CellRendererText, кто запрещает сокращение столбца.Попробуйте установить для его свойства ellipsize значение Pango.EllipsizeMode.END, как в этом примере:

from gi.repository import Gtk, GObject, GLib, Pango

list_store = Gtk.ListStore(str)

window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
paned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)

tree = Gtk.TreeView.new()
tree.set_model(list_store)
rend = Gtk.CellRendererText()
rend.set_property("ellipsize", Pango.EllipsizeMode.END)
column = Gtk.TreeViewColumn("title", rend, text=0)
column.set_resizable(True)
column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
tree.append_column(column)

for i in range (11):
    list_store.append(['ddt ' * 50])

paned.add1(tree)
paned.add2(Gtk.Label.new("hello"))
window.add(paned)

window.connect("destroy", Gtk.main_quit)
window.show_all()
Gtk.main()
...