2010-10-20 17 views
2

Je crée une interface graphique en utilisant Tkinter/ttk dans Python 2.7, et j'ai un problème où un cadre se redimensionnera une fois qu'un widget sera placé à l'intérieur. Je suis nouveau à Python et n'ai jamais utilisé Tkinter auparavant.Problème de redimensionnement de l'image dans Tk/ttk python

exemple:

ROOT = Tk() 
FRAME = ttk.Frame(ROOT, width=300, height=300, relief='groove') 
FRAME.grid() 
ROOT.mainloop() 

produira un cadre rainuré 300x300, si i placer un widget à l'intérieur comme ceci:

ROOT = Tk() 
FRAME = ttk.Frame(ROOT, width=300, height=300, relief='groove') 
BUTTON = ttk.Button(FRAME, text="DON'T READ THIS TEXT") 
FRAME.grid() 
BUTTON.grid() 
ROOT.mainloop() 

la trame se rétracte vers le bas pour être compatibles avec la touche. Toute façon de forcer le cadre à ne pas redimensionner?

+2

Tout ce UPPER_CASE_NAMES me dérange ... –

Répondre

1

si vous souhaitez ajouter un rembourrage, puis utilisez widg.grid(ipadx=..., ipady=..., padx=..., pady=...)

sinon, vous devrez ajouter plus de contexte sur ce que la mise en page que vous essayez d'atteindre

+0

Je ne veux pas ajouter de rembourrage, je veux voir s'il y a un moyen de forcer le cadre à rester à la taille que je lui ai dit d'être, quel est le point de l'option de taille et de largeur si elle ne tient pas? – user481875

+1

@ user481875: la hauteur et la largeur ne concernent que le gestionnaire de géométrie .place(). L'idée d'utiliser le gestionnaire de fenêtres .pack() ou .grid() est que vous ne devriez pas avoir besoin de vous soucier de la position ou de la taille réelle des widgets, car le gestionnaire de géométrie s'en rendra compte. –

+0

@ user481875: les options de largeur et de hauteur doivent donner des indications aux gestionnaires de géométrie quant à la taille préférée. Le gestionnaire de géométrie peut choisir de les redimensionner en fonction de la façon dont vous le configurez, mais il essayera d'honorer la taille demandée si cela est possible. –

6

Pour forcer le cadre à garder ses dimensions d'origine tour "propagation de la géométrie" désactivée. Dans votre cas, vous appelez FRAME.grid_propagate(False).

En parlant comme quelqu'un avec plus de 15 ans d'expérience Tk, je pourrais vous suggérer que vous n'avez certainement pas besoin de cette fonctionnalité. La capacité de Tk à «rétrécir pour s'adapter» est vraiment géniale, et il est vraiment facile de créer des interfaces graphiques avec un comportement de redimensionnement approprié. Une fois que vous commencez à désactiver la propagation de géométrie, vous constaterez que vous avez des interfaces graphiques avec un mauvais comportement de redimensionnement ou que vous passez beaucoup de temps à modifier les tailles et l'emplacement des widgets.

+0

Merci pour l'explication – user481875

-1

Cela devrait faire le travail: ROOT.geometry("640x480")

0

Cela fonctionne pour moi:

app = Application() 
app.master.title('Example') 
app.master.geometry('640x480') 
app.mainloop() 

Apllication est cadre dans mon cas avec la mise en page de la grille. Il redimensionne à la taille de la fenêtre principale, nous avons donc besoin de changer la taille de la fenêtre principale.