无法输入Python Entry Widget

时间:2014-08-04 03:41:42

标签: python python-2.7 tkinter tk tkinter-entry

我在tk Entry小部件中遇到了一个有趣的问题。如果我运行以下测试代码,

from Tkinter import *
root =Tk()
def pfunc(self):
    print Input.get()
f=Frame(root)
f.pack()
Input=Entry(f)
#Input.bind("<Return>",pfunc)
Input.pack()
root.mainloop()

我可以正确进入小部件并打印到控制台;但是,作为更大的GUI的一部分,以下代码不允许我单击“输入”框。

    self.Tlabel = Label(self.TempFrame, text="Temp")
    self.Tlabel.pack( side = LEFT)
    self.Tenter = Entry(self.TempFrame,width=10, bd =5)
    self.Tenter.bind("<Return>",self.getFlux)
    self.Tenter.pack (side=RIGHT)
    self.Flabel = Label(self.FluxFrame, text="Flux")
    self.Flabel.pack( side = LEFT)
    self.Fenter = Entry(self.FluxFrame, width=10, bd =5)
    self.Fenter.bind("<Return>",self.getTemp)
    self.Fenter.pack(side = RIGHT)

def getFlux(self):
    for i in range(len(self.fit_tuples)):
        if self.fit_tuples[i][0]==self.currentBFMdate and self.fit_tuples[i][1]==self.cell.get():
            fit_data=self.fit_tuples[i][2]
            self.Fenter.set(fit_data[0]*np.exp(fit_data[1]*int(self.Tenter.get())))
        else:
            self.Fenter.set("Invalid")

def getTemp(self):
    for i in range(len(self.fit_tuples)):
        if self.fit_tuples[i][0]==self.currentBFMdate and self.fit_tuples[i][1]==self.cell.get():
            fit_data=self.fit_tuples[i][2]
            self.Tenter.set(np.log(float(self.Fenter.get())/fit_data[0])/fit_data[1])
        else:
            self.Tenter.set("Invalid")

此外,如果我在单独的Windows PC上运行这两个代码,我会遇到同样的问题。我可能想到的唯一区别是我在一个类中使用实例变量;但似乎其他小部件绑定并正常工作。

2 个答案:

答案 0 :(得分:0)

如果使用bind方法,则使用事件对象调用回调。您应该将event参数添加到方法/函数中。 (见Events and Bindings - An Introduction to Tkinter

所以,rpelcae遵循以下几行:

def getFlux(self, event):
    ...

def getTemp(self, event):
    ...

第一个程序无意中起作用。其参数名称应为event,而不是self

答案 1 :(得分:0)

基本上,绑定方法正在传递&#34;返回&#34;作为getTemp的参数。正如其他用户建议的那样,只需在函数中添加另一个参数即可。