Je veux retirer un cadre de mon interface lorsqu'un bouton spécifique est cliqué.
Ceci est la fonction de rappel invoqué p> Cependant, il ne supprime pas lui-même. Je suis probablement simplement supprimer l'objet dans Python sans mettre à jour l'interface? P> Merci P> Mise à jour p> AttributeError: Frame instance has no attribute 'Destroy'
4 Réponses :
WONT Cette aide: chk cette sortie: PY Cookbook Le dernier para P> self.destroy () code> p>
mon widget est un cadre, il dit qu'il n'a pas d'attribut détruire
Le moyen exact de supprimer un widget de l'interface graphique dépend de quel gestionnaire de géométrie utilisez-vous. Si vous avez utilisé del code> ne supprime rien. strong>
del quelque chose code> est simplement supprime
quelque chose code> de la portée locale. Et bien que si
quelque chose code> était la seule référence à un objet, il peut em> permettre à l'objet de prendre des ordures recueillies à l'avenir, ne pensez même pas à utiliser
del code> pour supprimer des objets !!! Et étant donné que
auto code> est juste une variables normales,
self code> ne fait rien, sauf bien céder le reste de la méthode d'accéder à l'instance (donc à la fin de la méthode, C'est en fait comme
passe code>). p>
.grid () code>, vous pouvez utiliser
.grid_forget () code>. Notez que cela ne détruit toujours pas le widget - tout à fait contraire, vous pouvez continuer et
.grid () code>. - Mais cela ne fait aucune différence. P>
Ok merci, mais je n'ai pas utilisé la grille. Mon widget est un cadre. Comment puis-je supprimer des cadres?
@Patrick: Je sais que vous utilisez un cadre - je parle du gestionnaire de géométrie. C'est à dire. Avez-vous appelé the_frame.grid (certains, options) code> afin d'afficher le widget?
Non, encore une fois, je n'ai pas appelé la grille. J'ai ajouté le code à ma question
Pour supprimer, appelez soit Appelez ensuite frm.pack_forget () code> ou
frm.grid_forget () code> selon que le cadre a été emballé ou grisé. P>
frm.destroy () code> Si vous n'allez pas l'utiliser à nouveau, ou retenez-vous sur la référence, de vous reposer ou de se retrouver lorsque vous souhaitez le montrer à nouveau. P>
Enfin, Pack_Forget le fait disparaître! J'ai toujours un problème avec la méthode Détruire. Je reçois le message d'erreur que vous voyez dans la question
détruire code> est tous minuscules. Le message d'erreur indique que vous avez utilisé majuscule.
Steven Rumbalski J'ai la même erreur avec des minuscules "Destroy ()". En fait, le code travaille avec Just Pack_Forget. Mais j'ai besoin de détruire pour nettoyer la mémoire que je suppose ..
Disons que vous faites une classe. Vous devez faire quelques choses spéciales ici:
Donc, voici comment un prototype de base regarderait. P>
from Tkinter import Tk, Frame, Button, Label class GUI: def __init__(self, root): self.root = root # root is a passed Tk object self.button = Button(self.root, text="Push me", command=self.removethis) self.button.pack() self.frame = Frame(self.root) self.frame.pack() self.label = Label(self.frame, text="I'll be destroyed soon!") self.label.pack() def removethis(self): self.frame.destroy() root = Tk() window = GUI(root) root.mainloop()
C'est exactement ce que j'ai, mais je reçois toujours l'erreur "La trame n'a pas d'attribuer la destruction ()". J'ai mis à jour ma question avec le code
Et vous mettez toute l'interface graphique dans une classe? En outre, quelle version de Python utilisez-vous?
Oui, c'est dans une classe. J'utilise Python 2.6.1
C'est étrange. Ce script court pour moi à Python 2.7. Je ne sais pas ce qui se passe à votre fin.
Del Self Code> Il suffit de supprime le nom
auto code> de la portée locale.
Les bases de l'indentation que vous avez montrées apparaissent, vous avez écrit une méthode sous forme de sous-méthode à la méthode init B>. Self.ItemFrame et remodelez les deux doivent être indompensés et non au même niveau que la méthode en dessous. Cela pourrait expliquer pourquoi vous ne pouvez pas détruire le cadre.