Авторазмер Python Gtk3 TreeViewColumn, но сделайте их изменяемыми

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

Затем я установил для столбцов фиксированный размер, но теперь горизонтальная полоса прокрутки больше не появляется.

Так что, может быть, можно начать с авторазмера ширины столбца, но также дать возможность изменить ширину позже?

#!/usr/bin/env python

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

window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
window.set_size_request(400, 200)
mainbox = Gtk.VBox()
window.add(mainbox)

scrolled_window = Gtk.ScrolledWindow()
mainbox.pack_start(scrolled_window, True, True, 0)

transactions_liststore = Gtk.ListStore(str, str, str, str, str, str)   
for n in range(30):
    transactions_liststore.append(["A", "2016-10-10", "Ulrich Farmer", "99,99 EUR", "A short Text", "A longer Text with much much more more content"])
treeview = Gtk.TreeView(Gtk.TreeModelSort(transactions_liststore))   
scrolled_window.add(treeview)

for n, name in enumerate(["Type", "Date", "Name", "Value", "Info1", "Info2"]):
    cell = Gtk.CellRendererText()
    column = Gtk.TreeViewColumn(name, cell, text=n)

    if True:
        column.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
        column.set_fixed_width(50)
        column.set_min_width(50)
        column.set_expand(True)

    column.set_resizable(True)
    column.set_reorderable(True)
    treeview.append_column(column)

window.show_all()
Gtk.main()

редактировать: найдено на https://lazka.github.io/pgi-docs/Gtk-3.0/classes/TreeViewColumn.html#Gtk.TreeViewColumn.set_resizable

Если resizable имеет значение True, а режим изменения размера столбца — Gtk.TreeViewColumnSizing.AUTOSIZE, то режим изменения размера изменяется на Gtk.TreeViewColumnSizing.GROW_ONLY.


person oxidworks    schedule 02.12.2016    source источник


Ответы (1)


Попробуйте этот код:

if True:
    column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
    #column.set_fixed_width(50)

Редактировать:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GdkPixbuf, Gdk
import os, sys


class GUI:
    def __init__(self):
        window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
        window.set_size_request(400, 200)
        mainbox = Gtk.VBox()
        window.add(mainbox)
        window.connect('destroy', self.on_window_destroy)

        scrolled_window = Gtk.ScrolledWindow()
        mainbox.pack_start(scrolled_window, True, True, 0)

        transactions_liststore = Gtk.ListStore(str, str, str, str, str, str)    
        for n in range(30):
           transactions_liststore.append(["A", "2016-10-10", "Ulrich Farmer", "99,99 EUR", "A longer Text with much much more more content", "A short Text"])
        treeview = Gtk.TreeView(Gtk.TreeModelSort(transactions_liststore))   
        scrolled_window.add(treeview)

        for n, name in enumerate(["Type", "Date", "Name", "Value", "Info1", "Info2"]):
            cell = Gtk.CellRendererText()
            column = Gtk.TreeViewColumn(name, cell, text=n)

            column.set_min_width(50)
            column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
            column.set_resizable(True)
            column.set_reorderable(True)
            treeview.append_column(column)
        window.show_all()

    def on_window_destroy(self, window):
        Gtk.main_quit()
def main():
   app = GUI()
   Gtk.main()

if __name__ == "__main__":
   sys.exit(main())

Вы по-прежнему не можете изменить размер последнего столбца, но он работает для изменения размера других столбцов. Надеюсь это поможет.

person theGtknerd    schedule 03.12.2016
comment
Спасибо за ваш комментарий. В этом моя проблема: когда я устанавливаю для них автоматический размер, все они имеют хороший размер, но я не могу сделать их меньше. - person oxidworks; 03.12.2016
comment
Вы пытаетесь сделать их меньше имени столбца? И какой столбец вы пытаетесь сделать меньше? - person theGtknerd; 03.12.2016
comment
Не меньше имени столбца, но меньше текста содержимого. Например, представьте, что в Info1 есть одна строка с очень длинным текстовым содержимым, но вы хотите, чтобы строка была очень маленькой, потому что более необходимо видеть строки Info2 :-) - person oxidworks; 03.12.2016
comment
Я отредактировал свой ответ кодом, который работает для меня, за исключением того, что последний столбец все еще исправлен. - person theGtknerd; 04.12.2016