Comment définir une taille minimale de fenêtre dans tkinter?

ma compréhension est qu'après avoir initialisé tous les cadres et les widgets dans le __init__ méthode, la fenêtre de Tkinter se redimensionne pour s'adapter à tous ces composants.

je voudrais mettre de la fenêtre initialisé taille sa taille minimale. Je veux être capable de maximiser et de dimensionner la fenêtre plus grande, mais je ne veux jamais que la fenêtre soit assez petite pour commencer à cacher des widgets.

Comment puis-je accomplir ceci?

17
demandé sur Jace Browning 2012-05-04 16:33:14

4 réponses

Vous pouvez également forcer une mise à jour immédiatement, sans entrer dans votre mainloop, en utilisant quelque chose comme ceci:

root = Tk()
# set up widgets here, do your grid/pack/place
# root.geometry() will return '1x1+0+0' here
root.update()
# now root.geometry() returns valid size/placement
root.minsize(root.winfo_width(), root.winfo_height())

Description de update () à effbot tkinterbook:

traite tous les événements en attente, appelle les callbacks d'événements, complète n'importe quel en attente de la gestion de la géométrie, redessine les widgets si nécessaire, et les appels tous dans l'attente de tâches inactives. Cette méthode doit être utilisée avec précaution, car il peut conduire à des conditions de course vraiment désagréables si appelé de mauvais lieu (à partir d'un rappel d'événement, par exemple, ou d'une fonction que peut en aucun cas être appelée à partir d'un rappel d'événement, etc.). Lorsque dans en cas de doute, utilisez plutôt update_idletasks.

j'ai utilisé ceci une bonne affaire tout en jouant au sujet d'essayer de comprendre comment faire des choses comme obtenir la taille / position des widgets avant de sauter dans la boucle principale.

30
répondu John Gaines Jr. 2012-05-04 17:16:29

je sais que cette question est ancienne, mais voici une autre façon:

root = Tk()
root.minsize(foo, bar)

racine.minsize() définit la taille minimale des fenêtres à foo et bar, où foo et bar la largeur et la hauteur de la fenêtre, respectivement.

votre must, cependant mettez ce code à exécuter avant que votre mainloop ne finisse de s'exécuter. Il ne prendra effet après la commande est appelée.

6
répondu Aedon 2018-07-17 20:10:54

j'ai tout compris:

def __init__(self, master):
    ...
    self.master.update_idletasks()
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))
2
répondu Jace Browning 2012-05-04 14:11:48
root = Tk()

puisque la fenêtre racine est créée. La fenêtre racine est une fenêtre principale d'application dans nos programmes. Il possède une barre de titre et les bordures. Ceux-ci sont fournis par le gestionnaire de fenêtre. Il doit être créé avant tout autre widgets.

root.geometry("250x150+300+300")

geometry () méthode définit la taille de la fenêtre et le positionne sur l'écran. Les deux premiers paramètres sont la largeur et la hauteur de la fenêtre. Les deux derniers paramètres sont X, Y écran coordonner.

app = Example(root)

ici nous créons l'instance de la classe application.

root.mainloop()  

enfin, nous entrons dans le circuit principal. Le traitement de l'événement commence à partir de ce point. Le mainloop reçoit les événements du système de fenêtres et les envoie aux widgets d'application. Il se termine lorsque nous cliquons sur le bouton Fermer du titlebar ou appelons la méthode quit ().

enter image description here

j'espère que vous avez trouvé cela utile.

-3
répondu miksiii 2014-08-25 12:06:38