es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo permitir únicamente que el marco superior se estire verticalmente.

Intento adoptar https://stackoverflow.com/questions/60954478/tkinter-treeview-doesnt-resize-with-window, con muy pocas modificaciones.

import tkinter as tk
from tkinter import ttk
import random

class App():

def __init__(self):

    self.root = tk.Tk()

    self.frame = tk.Frame(self.root)
    self.frame.pack(expand=True, fill=tk.BOTH)

    self.tree = ttk.Treeview(self.frame, show="headings")
    self.tree.pack(expand=True, )

    self.frameBT = tk.LabelFrame(self.root,text='Buttons')
    self.frameBT.pack(expand=True, fill=tk.X)

    self.button = ttk.Button(self.frameBT, text="Fill", command=self.fill)
    self.button.pack(side=tk.BOTTOM,expand=True)

    self.fill()

    self.root.mainloop()

def fill(self):

    if self.has_data():
        self.tree.delete(*self.tree.get_children())

    i = random.randrange(1,10)
    self.tree["columns"]=tuple([str(i) for i in range(i)])

    for col in self.tree['columns']:
        self.tree.heading(col, text="Column {}".format(col), anchor=tk.CENTER)
        self.tree.column(col, anchor=tk.CENTER)

    j = random.randrange(10)

    for j in range(j):

        self.tree.insert("", "end", values = tuple([k for k in range(i)]))

def has_data(self):

    has_tree = self.tree.get_children()

    return True if has_tree else False

App()

Actualmente, cuando estiro la ventana verticalmente, obtengo

imagen

Mi pregunta es, ¿cómo mantener ese ‘Button’ en la parte inferior, mientras que el borde inferior del marco de la treeview se mueve hacia arriba y hacia abajo cuando redimensiono la ventana principal?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mantener el ‘Button’ en la parte inferior mientras el borde inferior del marco de treeview se mueve hacia arriba y hacia abajo cuando se cambia el tamaño de la ventana principal, podemos utilizar el método pack_propagate() del LabelFrame.

    Primero, necesitamos establecer las opciones fill y expand en False para el LabelFrame llamado frameBT. Luego, llamamos al método pack_propagate() en el LabelFrame frameBT y le pasamos False como argumento. Esto evitará que el LabelFrame se encoja o se expanda para adaptarse a sus elementos hijo.

    self.frameBT = tk.LabelFrame(self.root, text='Buttons')
    self.frameBT.pack(fill='x', expand=False)
    
    self.button = ttk.Button(self.frameBT, text="Fill", command=self.fill)
    self.button.pack(side=tk.BOTTOM, expand=True)
    
    self.frameBT.pack_propagate(False)
    

    Con esta modificación, el ‘Button’ permanecerá en la parte inferior del LabelFrame mientras el marco de treeview cambia de tamaño.

Comments are closed.