Listbox com tkinter Treeview, como evitar linhas vazias no final [closed]

0

Eu tenho o seguinte código para criar uma caixa de listagem com o widget Treeview.

import tkinter as tk
import tkinter.ttk as ttk

class AppBase:
    def __init__(self):
        self.mywin = tk.Tk()
        self.mywin.geometry("%dx%d+%d+%d" % (800, 600, 5, 5))
        self.frame1 = tk.Frame(self.mywin)
        self.frame1.pack()

        lb_header = ['name', 'surname']
        lb_list = [
        ('John', 'Smith') ,
        ('Larry', 'Black') ,
        ('Walter', 'White') ,
        ('Fred', 'Becker') 
        ]

        self.tree = ttk.Treeview(columns=lb_header, show="headings")
        self.tree.grid(in_=self.frame1)

        for col in lb_header:
            self.tree.heading(col, text=col.title())
        for item in lb_list:
            self.tree.insert('', 'end', values=item)

    def start(self):
        self.mywin.mainloop()

app=AppBase()
app.start()  

Funciona, mas se houver poucas linhas, tenho algumas linhas vazias no final.

Se eu aumentar o número de linhas de dados, tenho menos linhas vazias, acho que há um número mínimo de linhas e, se as linhas de dados forem menores que o mínimo, a caixa de listagem mostrará linhas brancas.

Como posso corrigir isso e configurar a caixa de listagem para não minimizar as linhas?

    
por gaiapac 04.03.2016 / 10:37

1 resposta

1

Essas não são linhas vazias, é a altura do widget treeview.

Eu nunca trabalhei com o tkinter antes, mas olhando para os documentos, encontrei a height opção :

height  Specifies the number of rows which should be visible. Note: the requested width is determined from the sum of the column widths.

Assim, você mesmo pode especificar a altura do treeview, assim:

    self.tree = ttk.Treeview(columns=lb_header, show="headings", height=2)

Ou para corresponder ao número de itens:

    self.tree = ttk.Treeview(columns=lb_header, show="headings", height=len(lb_list))

Embora eu não recomende isso, ele vai crescer fora da tela quando muitos itens forem adicionados.

    
por Timo 05.03.2016 / 10:20