2016-07-11 3 views
-1

Я хочу, чтобы получить входные данные от пользователя и поместить его в текстовый файл, но есть ошибки следующим образом:Tkinter на питоной 3.5.1 окна 8,1

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Users\dasom\AppData\Local\Programs\Python\Python35-32\Lib\tkinter\__init__.py", line 1549, in __call__ 
    return self.func(*args) 
    File "C:/Users/dasom/PycharmProjects/Exercise/4.pyw", line 5, in save_data 
    filed.write("Depot:\n%s\n" % depot.get()) 
AttributeError: 'NoneType' object has no attribute 'get'` 

Это говорит о линии 1549 в init .py файл, я искал его, и я не понимаю, в чем проблема.

def __call__(self, *args): 
    """Apply first function SUBST to arguments, than FUNC.""" 
    try: 
     if self.subst: 
      args = self.subst(*args) 
     return self.func(*args) 
    except SystemExit: 
     raise 
    except: 
     self.widget._report_exception() 

Вот весь мой код

from tkinter import * 

def save_data(): 
    filed = open("deliveries.txt", "a") 
    filed.write("Depot:\n%s\n" % depot.get()) 
    filed.write("Description :\n%s\n" % description.get()) 
    filed.write("Address :\n%s\n" % address.get("1.0", END)) 
    depot.delete(0, END) 
    description.delete(0, END) 
    address.delete("1.0", END) 

app = Tk() 
app.title('Head-Ex Deliveries') 

Label(app, text='Depot:').pack() 
depot = Entry(app).pack() 

Label(app, text="Description:").pack() 
description = Entry(app).pack() 

Label(app, text='Address:').pack() 
address = Text(app).pack() 

Button(app, text='save', command=save_data).pack() 

app.mainloop() 

На самом деле, я только что ввели код учебника. Ваша помощь будет принята с благодарностью. Благодарю.

ответ

1

Если учебник имеет такой код, это плохой учебник. Эта строка:

depot = Entry(app).pack() 

выполняет две вещи. Сначала он создает Entry, а затем помещает его в приложение. К сожалению, метод pack() действует на месте и возвращает None вместо ссылки на оригинальный виджет Entry. Разделить его:

depot = Entry(app) 
depot.pack() 

Сделайте это для всех подобных случаев присвоения None возвращаемого значения из метода в месте для ссылки, которые вы ожидаете, чтобы указать на полезный объект.

+0

Спасибо Тигр! – DasomJung