2010-05-13 13 views
0

J'essaye de créer un bouton multiligne avec PyGTK. J'ai ajouté une étiquette à ma sous-classe de gtk.Button, mais j'ai du mal à dimensionner l'étiquette sur le bouton. Si l'étiquette fait sa propre taille, il n'y a pas de retour à la ligne même avec label.set_line_wrap(True) car l'étiquette est simplement redimensionnée au-delà des limites du bouton. Je définirais la taille de l'étiquette à celle du bouton, mais à moins que je ne définisse explicitement la taille du bouton en utilisant set_size_request, je n'ai pas été capable de trouver la taille du bouton (il est emballé dans une table).Comment créer un bouton multiligne

Des suggestions?

Répondre

1

En général, cela n'est pas possible avec GTK +, car il n'y a pas d'étape où les widgets "négocient" les tailles. Au lieu de cela, les widgets signalent leur taille requise et, après ce conteneur, allouent certaines zones (normalement égales ou supérieures à celles requises). Dans GTK + 3, il y aura une négociation largeur-hauteur, donc si votre bouton (plutôt son étiquette) va recevoir plusieurs lignes, il sera capable de demander moins de largeur et d'envelopper son texte.

2.x le mieux que vous pouvez faire est d'utiliser probablement width_chars propriété de gtk.Label:

import gtk 

window = gtk.Window() 
align = gtk.Alignment (0.5, 0.5) 
button = gtk.Button ('a very long, possibly multiline text') 

label = button.child 
label.props.wrap = True 
label.props.width_chars = 20 

window.set_default_size (500, 500) 
window.connect ('destroy', lambda *ignored: gtk.main_quit()) 

window.add (align) 
align.add (button) 
window.show_all() 

gtk.main() 
+0

Non seulement cela fonctionne, mais c'est beaucoup plus propre que ce que je préparais ensemble. – exupero

0

Je trouve que dans Python 3.4 GTK + 3 tout ce que vous devez faire est d'ajouter un \n où vous voulez Pause. Il ne s'auto-enroule pas mais vous pouvez avoir des étiquettes multilignes pour les objets de bouton. Par exemple,

self.button = Gtk.Button(label="A lotta text \n and a lotta more.")