Agregar relleno a un widget tkinter solo en un lado

83

¿Cómo puedo agregar relleno a una ventana de tkinter, sin que tkinter centre el widget? Lo intenté:

 self.canvas_l = Label(self.master, text="choose a color:", font="helvetica 12")
 self.canvas_l.grid(row=9, column=1, sticky=S, ipady=30)

y

 self.canvas_l = Label(self.master, text="choose a color:", font="helvetica 12")
 self.canvas_l.grid(row=9, column=1, rowspan=2, sticky=S, pady=30)

Quiero un relleno de 30px solo en la parte superior de la etiqueta.

Jack S.
fuente

Respuestas:

197

Las opciones de relleno padxy padyde los métodos gridy packpueden tomar una tupla de 2 que representan el relleno izquierdo / derecho y superior / inferior.

He aquí un ejemplo:

import tkinter as tk

class MyApp():
    def __init__(self):
        self.root = tk.Tk()
        l1 = tk.Label(self.root, text="Hello")
        l2 = tk.Label(self.root, text="World")
        l1.grid(row=0, column=0, padx=(100, 10))
        l2.grid(row=1, column=0, padx=(10, 100)) 

app = MyApp()
app.root.mainloop()
Bryan Oakley
fuente
Interesante. ¿Se describe este comportamiento en algún lugar semioficial? Mis dos recursos tk favoritos, effbot y New Mexico Tech , no dan ningún indicio de que el acolchado puede ser desigual de esta manera. ¿Comportamiento secreto indocumentado?
Kevin
1
@Kevin: tkinter es solo una envoltura pitónica alrededor de un intérprete tcl incrustado que incluye la biblioteca tk. Los documentos canónicos de tk mencionan esta característica. Aquí está la referencia: tcl.tk/man/tcl8.5/TkCmd/grid.htm#M16
Bryan Oakley
Funciona en Grid padx / pady, pero no en Frame. Probablemente existan muchas más excepciones
Daniel Braun
1
@DanielBraun: también funcionará para marcos. A Tkinter no le importa qué tipo de widget sea.
Bryan Oakley
1
@Giova: sí, la versión tupla sólo funciona para los padxy padylas opciones de gridy pack. Las opciones padxy padyde algunos widgets son diferentes. No puede usarlo para la opción padxy padyde widgets. Intentaré aclarar mi respuesta.
Bryan Oakley