无法在Python 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()
我可以正常在这个控件里输入内容,并且能在控制台打印出来;但是下面这段代码,作为一个更大界面的一部分,却根本无法让我点击输入框。
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电脑上运行这两段代码,我也遇到了同样的问题。我能想到的唯一不同之处是,我在一个类里面使用了实例变量;但看起来其他控件都能正常绑定和工作。
2 个回答
0
如果你使用 bind
方法,回调函数会接收到一个事件对象。你应该在这个方法或函数中添加一个事件参数。(可以参考 事件和绑定 - Tkinter 入门)
所以,替换下面的代码:
def getFlux(self, event):
...
def getTemp(self, event):
...
第一个程序的运行结果是不符合预期的。它的参数名称应该是 event
,而不是 self
。
0
简单来说,bind方法是把“Return”这个参数传给getTemp函数。就像其他用户提到的,只需要在这个函数里再加一个参数就可以了。