2012-03-29 40 views
8

Esto parece una pregunta tonta, pero ¿es posible cambiar manualmente la altura de un botón ttk?Cambiar la altura del botón ttk en Python

Algo así como button = tkinter.Button(frame, text='hi', width=20, height=20...) funciona bien para un botón tkinter. Aunque preferiría usar un botón ttk, ya que se ve mucho mejor estéticamente.

button = ttk.Button(frame, text='hi', width=20, height=20...) no funciona, la altura no parece ser una opción válida. He intentado configurarlo con config o buscando elementos en el estilo para cambiar y no he tenido suerte.

¿Hay una solución simple para esto? Estoy usando Python 2.7, Windows para el registro. Lo siento, parece una pregunta un poco trivial, pero he mirado alrededor sin mucha suerte.

Respuesta

5

Para responder directamente a su pregunta, no, no puede hacer esto. El objetivo de los botones temáticos es proporcionar un tamaño uniforme.

Habiendo dicho eso, hay mucho espacio para el pensamiento listo para usar. Por ejemplo, puede empaquetar el botón en un marco, desactivar la propagación de geometría en el marco (para que el tamaño del marco controle el tamaño del botón en lugar de viceversa), luego ajuste el tamaño del marco a lo que desee.

O, intente poner una imagen transparente en el botón que es la altura que desea, luego utilice la opción compound para superponer la etiqueta sobre la imagen invisible.

O cree un tema personalizado que use relleno para obtener el tamaño que desea.

Finalmente, puede colocar el botón en una cuadrícula, tenerlo "adhesivo" en todos los lados, luego establecer una altura mínima para esa fila.

Por supuesto, si usted está en OSX todas las apuestas están desactivadas - realmente quiere hacer que los botones tengan un tamaño específico.

+0

Grande, todos parecen como los potentes un buen trabajo alrededor. Gracias. – user1301039

+0

¿La deshabilitación de la propagación de geometría y el bloqueo en un marco funcionan también con la cuadrícula? Lo intenté una vez, pero no pude hacerlo bien. Podría necesitar un segundo intento. – Kumba

+0

@Kumba: la cuadrícula y el paquete no son diferentes a este respecto: cuando desactiva la propagación de la geometría, el tamaño del widget hijo no afecta el tamaño del widget que lo contiene. –

2

Sólo un ejemplo, como @Bryan dijo: "Por ejemplo, usted puede embalar el botón en un marco", lo hice así:

import Tkinter as tk 
import ttk 

class MyButton(ttk.Frame): 
    def __init__(self, parent, height=None, width=None, text="", command=None, style=None): 
     ttk.Frame.__init__(self, parent, height=height, width=width, style="MyButton.TFrame") 

     self.pack_propagate(0) 
     self._btn = ttk.Button(self, text=text, command=command, style=style) 
     self._btn.pack(fill=tk.BOTH, expand=1) 
0

Esto funcionó para mí:

my_button = ttk.Button(self, text="Hello World !") 
my_button.grid(row=1, column=1, ipady=10, ipadx=10) 

donde ipady y ipadx añade píxeles dentro del botón a diferencia pady y padx que añade píxeles fuera del botón

Cuestiones relacionadas