Почему python говорит, что есть 4 аргумента, когда есть только 3? - PullRequest
0 голосов
/ 06 января 2020

Я пишу Tkinter с большим приложением. Я считаю, что соединения с электронными таблицами сделаны правильно, потому что я могу читать данные с него. Я использую python 2.7.15 и gspread 0.6.2. Я получаю ошибку. Если я опускаю аргумент 'RAW' в конце вызова функции, я больше не получаю никаких ошибок, но ничего не записывается в электронную таблицу.

Exception in Tkinter callback
Traceback (most recent call last):
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
    return self.func(*args)
  File "app.py", line 22, in clicked
    sheet.insert_row(insertRow,index,'RAW')
TypeError: insert_row() takes at most 3 arguments (4 given)

import gspread
from oauth2client.service_account import ServiceAccountCredentials
from Tkinter import *

scope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]

creds = ServiceAccountCredentials.from_json_keyfile_name("client_secret.json", scope)

client = gspread.authorize(creds)

sheet = client.open("This").sheet1  # Open the spreadhseet

#data = sheet.get_all_records()  # Get a list of all records

#row = sheet.row_values(3)  # Get a specific row
#col = sheet.col_values(3)  # Get a specific column
#cell = sheet.cell(1,2).value  # Get the value of a specific cell
def clicked():
    index = sheet.row_count
    index+=1
    insertRow = [nametxt.get(),placetxt.get(), phonetxt.get()]
    sheet.insert_row(insertRow,index,'RAW')
window = Tk()
window.title("Registration application")
window.geometry('700x700')
namelbl = Label(window, text="Name",font=("Ubuntu",20))
placelbl = Label(window, text="Place", font=("Ubuntu",20))
phonelbl = Label(window,text="Phone No", font=("Ubuntu",20))
placetxt = Entry(window,width = 20)
nametxt = Entry(window,width=20)
phonetxt = Entry(window,width = 20)
namelbl.grid(column=1, row=1,)
nametxt.grid(column=2, row=1)
placelbl.grid(column=1, row=2)
placetxt.grid(column=2,row=2)
phonelbl.grid(column =1, row=3)
phonetxt.grid(column = 2,row=3)
button = Button(window, text="submit",command=clicked)
button.grid(column=2, row=5)
window.mainloop()

#sheet.update_cell(2,2, "CHANGED")  # Update one cell

1 Ответ

0 голосов
/ 06 января 2020

Вы используете старую версию gspread. В используемой вами версии определение insert_row выглядит следующим образом:

def insert_row(self, values, index=1):

Обратите внимание, что для этого требуется только три аргумента: self (автоматически передается при вызове экземпляра) вместе с values и index. Он не принимает никаких других параметров. Вам нужно удалить аргумент RAW, чтобы ваш код работал с этой версией библиотеки.

...