2015-10-06 54 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