2017-08-13 3 views
0

Je suis un novice en Python. Je suis donc en train de coder une interface graphique, et dans ce cadre, je souhaite spécifier des liaisons pour les widgets d'entrée. Puisque les commandes que je veux que les widgets d'entrée lancent quand un certain événement se produit sont similaires, j'ai pensé que cela économiserait de l'espace et de l'effort si je pouvais définir tous les champs d'entrée pour faire partie d'une classe nommée FIELDS. Ensuite, je pourrais définir une méthode dans le cadre de cette classe qui imprime le résultat de l'application de la fonction get. Le code suivant est:Impossible de définir la classe pour les champs d'entrée dans Tkinter

from tkinter import * 
class FIELDS(Entry): 
''' 
Inherits from Entry class so that methods like pack() can be used 
''' 
    def x(event): #method to print what was typed in the entry field. 
     print(str(self.get())) #prints the input text 

root = Tk() 
entry_field = Entry(root) 
entry_field = FIELDS() 
entry_field.pack() 
entry_field.bind('<Return>', FIELDS.x) 
root.mainloop 

En implémentant ceci, cependant, je reçois une erreur: le nom 'self' n'est pas défini. L'erreur complète est en fait assez longue et je peux la partager si nécessaire (ne pas le faire pour garder la question brève). Dans l'instanciation, j'ai passé entry_field comme self. Pourquoi reçois-je cette erreur et comment puis-je la corriger?

Répondre

0

Vous avez plusieurs problèmes dans votre code.

  1. La docstring est indentée de manière incorrecte. Il doit être indenté de la même manière que le code de la classe. Vous devez définir x pour inclure le paramètre self. Ce n'est pas une exigence spécifique à tkinter, c'est juste comme ça que les classes fonctionnent en python.
  2. Vous devez appeler la méthode sur l'instance, pas sur la classe. Vous devez modifier la liaison à `entry_field.bind ('', entry_field.x)