我在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上运行这两个代码,我会遇到同样的问题。我可能想到的唯一区别是我在一个类中使用实例变量;但似乎其他小部件绑定并正常工作。
答案 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的参数。正如其他用户建议的那样,只需在函数中添加另一个参数即可。