【问题标题】:Autosize Python Gtk3 TreeViewColumn but make them resizable自动调整 Python Gtk3 TreeViewColumn 的大小,但使它们可调整大小
【发布时间】:2016-12-02 16:10:11
【问题描述】:

我尝试更改列的宽度。当我将它们设置为自动调整大小时,我无法将它们变小。

然后我将列设置为固定大小,但现在水平滚动条不再出现。

所以也许可以从自动调整列宽开始,但也可以稍后更改宽度?

#!/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,然后将sizing模式改为 Gtk.TreeViewColumnSizing.GROW_ONLY.

【问题讨论】:

    标签: python gtk3 gtktreeview


    【解决方案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())
    

    您仍然无法调整最后一列的大小,但它可以调整其他列的大小。希望这会有所帮助。

    【讨论】:

    • 感谢您的评论。那是我的问题:当我将它们设置为自动调整大小时,我不能让它们变小。
    • 您是否想让它们小于列名?您要缩小哪一列?
    • 不小于列名,但小于内容文本。例如,考虑 Info1 有一行很长的文本内容,但您希望该行非常小,因为更需要查看 Info2 行:-)
    • 我已经用适合我的代码编辑了我的答案,除了最后一列仍然是固定的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    相关资源
    最近更新 更多