2011-05-06 4 views
3
from TKinter import * 

class Ui(Frame): 
    def __init__(self) 
    Frame.__init__(self, None) 

    self.grid() 
    bquit=Button(self, text="Quit", command=self.quit_pressed) 
    bquit.grid(row=0, column=0) 

    def quit_pressed(self): 
    self.destroy() 

app=Ui() 
app.mainloop() 

Pourquoi ce programme Tkinter ne se termine-t-il pas correctement lorsque j'appuie sur le bouton «Quitter»?L'application Python Tkinter ne se ferme pas correctement

+0

Utilisez-vous IDLE? –

+0

n'utilisant pas IDLE. – jldupont

Répondre

4

Avec self.destroy() vous êtes juste détruire le cadre, non le conteneur de niveau supérieur, vous devez faire self.master.destroy() pour qu'il se termine correctement

3

La raison pour laquelle cela ne fonctionne pas est que vous utilisez une méthode incorrecte pour terminer le programme dans quit_pressed. Ce que vous faites en ce moment, c'est tuer l'image de soi, pas le cadre de la racine. L'image auto est une nouvelle image que vous avez maillée dans le cadre racine, donc lorsque vous tuez l'image autonome, vous ne tuez pas l'image racine. Cela peut sembler déroutant en raison de mon style de frappe, alors laissez-moi donner un exemple.

Actuellement, vous avez

def quit_pressed(self): 
    self.destroy() #This destroys the current self frame, not the root frame which is a different frame entirely 

Vous êtes en mesure de remédier à cette situation en changeant la fonction de cela,

def quit_pressed(self): 
    quit() #This will kill the application itself, not the self frame.