2010-01-09 14 views
2

Je tente d'utiliser la méthode d'appel d'un ttk.Button, comme le montre à TkDocs (regardez « Le rappel de commande »), mais je continue à obtenir cette erreur:ttk.Button retourne Aucun

AttributeError: 'NoneType' object has no attribute 'invoke'

Alors, j'ai essayé ceci dans le Shell interactive:

ActivePython 3.1.1.2 (ActiveState Software Inc.) based on 
Python 3.1.1 (r311:74480, Aug 17 2009, 12:30:13) [MSC v.1500 32 bit (Intel)] on 
win32 

>>> from tkinter import * 
>>> import tkinter.ttk as ttk 
>>> root = Tk() 
>>> button = ttk.Button(root, text="Test").grid(row=0, column=0) 
>>> print(button) 
None 

ce qui montre que revient ttk.Button Aucun.

ttk.Button est destiné à renvoyer None. Et, si oui, pourquoi TkDocs dit qu'il existe une méthode invoke?

+2

Pour mémoire, cela se produit aussi pour les non-TTK! widgets, et si vous utilisez 'pack' au lieu de' grid'. – Kevin

Répondre

10

Non, vous avez tout à fait tort: ​​votre code ne pas montrent que les rendements ttk.ButtonNone - il montre que la méthode grid sur l'objet bouton retourne None! Vous ne voyez pas que vous appelez .grid sur quoi que ce soit que ttk.Button renvoie (l'objet bouton), et c'est le résultat de cette grille appel que vous attribuez à "bouton" ?!

donc faire droit à la place ...:

button = ttk.Button(root, text="Test") 
button.grid(row=0, column=0) 

vous pouvez maintenant print button et bien sûr les résultats seront très différents -)