2010-01-09 4 views
2

Я пытаюсь использовать метод Invoke в виде ttk.Button, как показано на TkDocs (смотрите на «Команда» Обратный звонок), но я получаю эту ошибку:ttk.Button возвращает None

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

Итак, я попробовал это в интерактивной консоли:

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 

это показывает, что ttk.Button возвращает None.

Это ttk.Button предназначено для возврата None. И если да, то почему TkDocs говорит, что существует метод invoke?

+2

Для записи, это также происходит из-за отсутствия TTK! виджеты, и если вы используете 'pack' вместо' grid'. – Kevin

ответ

10

Нет, вы совершенно неправильно: ваш код делает не показывают, что ttk.Button возвращает None - это показывает, что grid метод на объекте кнопки возвращает None! Разве вы не видите, что вы вызываете .grid на то, что он возвращает ttk.Button (объект кнопки), и это результат того, что сетка называет, что вы назначаете «кнопку» ?!

Так сделать это правильно, а не ...:

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

теперь вы можете print button и, конечно, результаты будут сильно отличаться -)