每次Entry小部件的值更改时调用Command命令功能

时间:2015-07-08 06:10:22

标签: python tkinter

每次在check_value窗口小部件中输入的值发生更改时,我都想调用Entry函数,但它只是第一次调用。

class table(tk.frame)
    ....
    ....#some functions
    def enterdata(self):
        ....
        ....
        for i in range(1,no_of_params):
            cell=work_sheet.cell(i,0)
            table.param_l.append(cell.value)
            var=StringVar()
            Button(middleframe,text=cell.value,width=40,height=2,command=lambda i=i :self.info(i)).grid(row=i+3,column=0)
            entry=Entry(middleframe,validate='focusout',validatecommand=lambda i=i:self.checkvalue(middleframe,i-1),\
                   textvariable=var,bd=5,width=30).grid(row=i+3,column=1)
            table.val.append(var)
            Label(middleframe,text="Enter value",width=15,height=2,bd=5).grid(row=i+3,column=2)

    def checkvalue(self,middleframe,r):
        if r==0:
            print table.val[r].get()    
            if "2" in table.val[r].get():
                        Label(middleframe,text="SUCCESS",fg="Dark Green",width=15,height=2,bd=5,\
                            font("Helvetica",11,"bold")).grid(row=r+4,column=2)
            else:
                        Label(middleframe,text="ERROR",fg="Dark Red",width=15,height=2,bd=5,\
                            font=("Helvetica",11,"bold")).grid(row=r+4,column=2)
        ......#similar checks for other values of 'r'

1 个答案:

答案 0 :(得分:1)

函数必须返回TrueFalse。如果没有,则自动关闭验证。此外,您无法在该过程中更改条目窗口小部件的值。你没有显示你的整个代码,所以我不知道你是不是在做什么。

此外,同时使用validatecommandtextvariable时需要注意。只要您只使用var获取值而从不设置它就可以了。

the official tk documentation(构建Tkinter):

  

通常,textVariable和validateCommand可能很危险   混合。已经克服了任何问题,以便使用validateCommand   不会干扰条目小部件的传统行为。   将textVariable用于只读目的永远不会导致   问题。当您尝试将textVariable设置为时,会出现危险   validateCommand不接受的东西,导致   validate成为none(不会触发invalidCommand)。   当评估validateCommand发生错误时也会发生同样的情况。

     

主要是,在validateCommand或。时会发生错误   invalidCommand在评估时遇到错误   validateCommand不返回有效的Tcl布尔值。该   编辑条目时,validate选项也会将自身设置为none   来自validateCommand或invalidCommand的小部件。   此类版本将覆盖正在验证的版本。如果你   希望在编辑期间编辑条目小部件(例如将其设置为{})   验证并仍然设置验证选项,您应该包括   命令