鱼C论坛

 找回密码
 立即注册
查看: 1175|回复: 3

[已解决]关于ENTRY组件的额外选项的疑惑

[复制链接]
发表于 2022-5-15 15:47:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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),是什么原因呢?

---以下我的运行后结果:
lzb.png

---以下小甲鱼演示结果:
Fish.png
最佳答案
2022-5-16 09:09:26

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


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

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

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

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


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

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


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

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


这显示的是组件地址吧,你这里为什么不是显示组件名不太清楚,应该是不影响正常使用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-16 00:04:21 | 显示全部楼层
哈,这个贴居然是由小甲鱼本尊亲自审核通过的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-16 09:09:26 | 显示全部楼层    本楼为最佳答案   

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


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

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

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

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


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

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


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

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


这显示的是组件地址吧,你这里为什么不是显示组件名不太清楚,应该是不影响正常使用的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-16 23:20:00 | 显示全部楼层
信息量有点大,容我再想想消化下,感谢大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 08:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表