2015-10-06 84 views
-1

我收到了一個我創建的按鈕的錯誤消息。我的代碼是這樣的:Tkinter'Entry'對象不可調用

#!/usr/bin/python 
from tkinter import * 

root = Tk() 
root.resizable(width=FALSE, height=FALSE) 

#funcion para agregar datos nuevos 
def agregarDato(fecha,campo,labor,tipoGasto,monto,loggedBy,detalle): 
    dato=[fecha,campo,labor,tipoGasto,monto,loggedBy,detalle] 
    mesAno=fecha.split('/')[1]+'-'+fecha.split('/')[2] 
    #si el archivo mes-ano existe entonces se edita. Si no, se crea y agrega 
    archivo=open(mesAno+'.txt', 'a') 
    archivo.write(str(dato)+'\n') 




leftFrame=Frame(root, width=500,height=300) 
leftFrame.pack(side=LEFT) 
rightFrame=Frame(root, width=500,height=300) 
rightFrame.pack() 
### Texto y cajas 
label_fecha=Label(leftFrame,text='Fecha:') 
label_campo=Label(leftFrame,text='Campo:') 
label_labor=Label(leftFrame,text='Labor:') 
label_tipoGasto=Label(rightFrame,text='Tipo de gasto:') 
label_monto=Label(rightFrame,text='Monto:') 
label_detalle=Label(rightFrame,text='Detalle:') 
label_loggedBy=Label(leftFrame,text='Autor:') 

entry_fecha=Entry(leftFrame) 
entry_campo=Entry(leftFrame) 
entry_labor=Entry(leftFrame) 
entry_tipoGasto=Entry(rightFrame) 
entry_monto=Entry(rightFrame) 
entry_detalle=Entry(rightFrame) 
entry_loggedBy=Entry(leftFrame) 

label_fecha.grid(row=0,column=0,sticky=E) 
label_campo.grid(row=1,column=0,sticky=E) 
label_labor.grid(row=2,column=0,sticky=E) 
label_tipoGasto.grid(row=0,column=0,sticky=E) 
label_monto.grid(row=1,column=0,sticky=E) 
label_detalle.grid(row=2,column=0,sticky=E) 
label_loggedBy.grid(row=3,column=0,sticky=E) 

entry_fecha.grid(row=0,column=1) 
entry_campo.grid(row=1,column=1) 
entry_labor.grid(row=2,column=1) 
entry_tipoGasto.grid(row=0,column=1) 
entry_monto.grid(row=1,column=1) 
entry_detalle.grid(row=2,column=1) 
entry_loggedBy.grid(row=3,column=1) 

###botones ingresar y volver 
boton_ingresar=Button(rightFrame,text='Ingresar',command= lambda: agregarDato(entry_fecha.get(),entry_campo.get,entry_labor.get(),entry_tipoGasto(),entry_monto.get(),entry_loggedBy.get(),entry_detalle.get())) 
boton_ingresar.grid(row=3,column=0) 

root.mainloop() 

,我得到的錯誤是:

Traceback (most recent call last): 
    File "C:\Python34\lib\tkinter\__init__.py", line 1487, in __call__ 
    return self.func(*args) 
    File "C:\Users\Matias\Desktop\Proyecto MiPi\Int_pagAgregarDato.py", line 56, in <lambda> 
    boton_ingresar=Button(rightFrame,text='Ingresar',command= lambda: agregarDato(entry_fecha.get(),entry_campo.get(),entry_labor.get(),entry_tipoGasto(),entry_monto.get(),entry_loggedBy.get(),entry_detalle.get())) 
TypeError: 'Entry' object is not callable 
+1

莫非你把這個減到了[mcve]? – jonrsharpe

回答

1

在線路由錯誤代碼標識,你有這樣的:

boton_ingresar=Button(..., entry_tipoGasto(),...) 

注意如何您正嘗試調用條目(如錯誤消息所述),而不是調用條目上的get方法。

更改代碼是...entry_tipoGastro.get()...

+0

天啊!幾小時試圖找到錯誤哈哈哈。謝謝! – Matnagra

+0

@matnagra:這是一個很好的例子,說明爲什麼應該避免使用lambda:如果每個調用get()的調用都在單獨的行中,那麼錯誤信息將更好地指出錯誤。 –

+0

但我怎麼做一個按鈕,做同樣的事情,而不使用它? 我找不到比使用lambda更好的例子,說實話我不太喜歡那個命令... – Matnagra

0

在您的按鈕的構造函數你把:

entry_tipoGasto() 

,而不是

entry_tipoGasto.get() 

所以你嘗試調用一個條目

+0

天啊!幾小時試圖找到錯誤哈哈哈。謝謝! – Matnagra