2015-03-19 3 views
-1

Я пытаюсь сделать простой графический интерфейс как часть моего обучения Python/Tkinter - попытка получить кнопку сохранения для работы, но я получаю ошибку: TypeError: save() missing 1 required позиционный аргумент: «записи»GUI в Python 3 с помощью Tkinter

Исследование в Интернете не помогает мне, пробовал весь день!

Спасибо за любую помощь заранее, мой полный код ниже:

from tkinter import * 
from math import * 

fields = 'Owners Name', 'Rate', 'length', 'Length_of_stay' 

def save(entries): 
text_file = open ("text.txt","a") 
text_file.write (entries) 
entries = [] 
    for entry in entries: 
    field = entry[0] 
    text = entry[1].get() + "\n" 
with open("text.txt", "a") as f: 
    f.write(entries) 

def fetch(entries): 
    for entry in entries: 
    field = entry[0] 
    text = entry[1].get() 
    print('%s: "%s"' % (field, text)) 

def makeform(root, fields): 
    entries = [] 
    for field in fields: 
    row = Frame(root) 
    lab = Label(row, width=15, text=field, anchor='w') 
    ent = Entry(row) 
    row.pack(side=TOP, fill=X, padx=5, pady=5) 
    lab.pack(side=LEFT) 
    ent.pack(side=RIGHT, expand=YES, fill=X) 
    entries.append((field, ent)) 
    return entries 


def onSave(entries): #save command 
    filename = asksaveasfilename(defaultextension='.txt') 
    if filename: 
     with open(filename, 'w') as f: 
      f.write(entries.gettext()) 

def calc(entries): 
x = (int(entries['Rate'].get())) 
y = (int(entries['length'].get())) 
z = x + y 
print(z) 

if __name__ == '__main__': 
    root = Tk() 
    w = Label(text="Cardiff Yachting Marina Booking System") 
    w.pack() 
    w = Label(text="Hourly: £0.50\nDaily: £10.00\nWeekly:£50.00\nMonthly: £180.00\nYearly: £1320.50\n", justify=LEFT) 
    w.pack() 
    w = Label(text="Complete your booking details below:") 
    w.pack() 
    ents = makeform(root, fields) 
    root.bind('<Return>', (lambda event, e=ents: fetch(e))) 
    b1 = Button(root, text='Show', 
     command=(lambda e=ents: fetch(e))) 
    b1.pack(side=LEFT, padx=5, pady=5) 
    b2 = Button(root, text='Quit', command=root.quit) 
    b2.pack(side=LEFT, padx=5, pady=5) 
    b3 = Button(root, text='Calculate', 
    command=(lambda e=ents: calc(e))) 
    b3.pack(side=LEFT, padx=5, pady=5) 
    b = Button(root, text="save", width=9, command=save) 
    b.pack(side=LEFT, padx=5, pady=5) 
    root.mainloop() 
+1

Исправьте углубление. – Kevin

ответ

0

Использование функции сохранения в качестве обратного вызова, аргументы не передаются на него.

Либо объявить глобальную переменную, либо подумать о способе передать их в обратный вызов.

Также, пожалуйста, проверьте свой отступ линий при отправке образцов кода на SO.