2017-05-17 2 views
1

Comme je l'ai compris d'après la référence Tkinter, une fenêtre enfant transitoire est dessinée (centrée?) Sur sa fenêtre parente. Cela fonctionne pour moi sous Linux mais pas sous Windows (7).Python 2.7/Windows 7/Tkinter: Centre fenêtre enfant transitoire sur parent

Avez-vous des suggestions pour lesquelles cela se produit?

Je peux centrer la fenêtre manuellement avec la méthode .geometry(), mais lorsque l'interface graphique calcule certaines valeurs (disons pendant une seconde), une petite fenêtre s'affiche sans interface graphique, puis elle passe à la valeur spécifiée position même lorsque j'appelle la méthode .withdraw.

Merci beaucoup!

# -*- coding: utf-8 -*- 

import Tkinter as tk 
import ttk 

class Parent(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self.txt = tk.Text(master=self) 
     self.txt.pack() 
     self.btn = ttk.Button(master=self, text='Show Child', 
           command=self.show) 
     self.btn.pack() 
     self.mainloop() 

    def show(self, *args): 
     Child(self) 


class Child(tk.Toplevel): 

    def __init__(self, master, *args, **kwargs): 
     tk.Toplevel.__init__(self, *args, **kwargs) 
     self.txt = tk.Text(master=self) 
     self.txt.pack() 

Parent() 

Répondre

0

D'accord, je résolu ce de la manière suivante:

  • .withdraw() la fenêtre
  • régler le .geometry() au centre sur la fenêtre parent
  • faire un peu de calcul pour obtenir l'interface désirée
  • .update_idletasks()
  • enfin .deiconify() la fenêtre.