2016-01-20 2 views
0

Est-il possible de supprimer l'entrée utilisateur dans un widget d'entrée lorsque son état est désactivé et réactivé? L'entrée de l'utilisateur reste telle quelle, je voudrais le faire sans avoir à ajouter un événement de bouton.Comment supprimer le texte d'entrée lors de la désactivation et de la réactivation du widget

from Tkinter import * 

class Interface(): 
    def __init__(self, window): 
     frame = Frame(window) 
     frame.pack() 

     self.hopLabel = Label(frame, text="Number:", anchor=E) 
     self.hopLabel.grid(row=0, column=0, sticky=EW) 

     options = range(0,6) 
     options.append("Other") 

     self.variable = StringVar(frame) 
     self.variable.set(options[0]) 
     self.options = OptionMenu(frame, self.variable, *options, command=self.this) 
     self.options.grid(row=0, column=2, sticky=EW) 

     self.button = Button(frame,text = "Print Value",width=20,command = self.printit(self.variable.get())) 
     self.button.grid(row=1) 

     self.otherEntry = Entry(frame, state=DISABLED) 
     self.otherEntry.grid(row=0, column=1, sticky=EW) 

    def this(self, value): 
     if value == "Other": 
      self.otherEntry.config(state=NORMAL) 
     else: 
      self.otherEntry.config(state=DISABLED) 

    def printit(self,value): 
     print value 

if __name__ == "__main__": 
    root = Tk() 
    app = Interface(root) 
    root.mainloop() 

Pour économiser de l'espace, je n'ai pas ajouter la fonction qui imprime la valeur de l'option « Autre ». Ma question est encore: Y at-il de toute façon supprimer la valeur dans la zone de saisie lorsque l'état du widget passe de DISABLED à NORMAL sans avoir à appuyer sur un bouton?

Répondre

0

Pour supprimer le texte d'un widget d'entrée lorsque l'état est désactivé, il vous suffit de définir l'état à la normale d'abord et ensuite appeler la méthode delete:

def this(self, value): 
    if value == "Other": 
     self.otherEntry.config(state=NORMAL) 
     self.otherEntry.delete(0, "end") 
    ... 
+0

Merci! Je n'ai pas pensé à ajouter .delete (0, "end") à l'état Normal, je l'ai essayé sur l'état Désactivé. Ça marche! –