lzb1001 发表于 2022-5-15 15:47:19

关于ENTRY组件的额外选项的疑惑

本帖最后由 lzb1001 于 2022-5-15 22:47 编辑

win10,Python版本3.7.6
-------------------------------
from tkinter import *

root = Tk()

v = StringVar()


def test(content, reason, name):
    if content == '小甲鱼':
      print('输入正确!')
      print(content, reason, name)
      return True
    else:
      print('输入错误!')
      print(content, reason, name)
      return False
   


testCMD = root.register(test)


e1 = Entry(root, textvariable=v, validate='focusout', validatecommand=(testCMD, '%P', '%v', '%W'))
e2 = Entry(root)

e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)




root.title('Entry组件教学示例')




mainloop()

--------------------------
我的问题如下:

1、v = StringVar() 以及mainloop()中的()如果没有好像影响不大,测试过好像不会报错,是否可以不要?

2、return True和return False作用?必须的吗?没有的话有何影响?

3、小甲鱼教学视频中提到需要先“冷却”验证函数,这里冷却的意思是……?

4、我的运行后结果(见下图)与小甲鱼演示(见下下图)的不同(小甲鱼视频中显示的是.54328336),是什么原因呢?

---以下我的运行后结果:


---以下小甲鱼演示结果:

lzb1001 发表于 2022-5-16 00:04:21

哈,这个贴居然是由小甲鱼本尊亲自审核通过的{:10_257:}

Twilight6 发表于 2022-5-16 09:09:26


v = StringVar() 以及mainloop()中的()如果没有好像影响不大,测试过好像不会报错,是否可以不要?

而你没加 () 表示的是这个函数体,并没有调用这个函数,而你代码中没有调用 StringVar 对象中的方法,自然不会发生报错,若你在 test 中加入一行 v.get() 就会导致发生报错

mainloop() 方法允许程序循环执行,并进入等待和处理事件。而且 mainloop() 方法的作用会监听每个组件,当组件发生变化或触发事件时,会立即更新窗口

若你没加上括号就不会开始循环事件和监听窗口,窗口也就不被创建

return True和return False作用?必须的吗?没有的话有何影响?

validatecommand 返回 False 时,会再调用 invalidcommand 参数所赋值的方法,而若没有设置 invalidcommand 参数,那么就什么也不做

小甲鱼教学视频中提到需要先“冷却”验证函数,这里冷却的意思是……?

应该就是指激活函数时候需要的前置条件和后置条件,例如获取焦点,和失去焦点

我的运行后结果(见下图)与小甲鱼演示(见下下图)的不同(小甲鱼视频中显示的是.54328336),是什么原因呢?

这显示的是组件地址吧,你这里为什么不是显示组件名不太清楚,应该是不影响正常使用的

lzb1001 发表于 2022-5-16 23:20:00

信息量有点大,容我再想想消化下,感谢大神
页: [1]
查看完整版本: 关于ENTRY组件的额外选项的疑惑