鱼C论坛

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

tkinter Entry的验证函数验证次数有限

[复制链接]
发表于 2022-5-13 16:38:02 | 显示全部楼层 |阅读模式

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

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

x
35讲easygui的课后作业改成用tkinter来实现,写了一个验证输入有效性的函数,但发现验证结果没有按照预期进行
在输入符合要求的数字后,按BackSpace删除第一个数字时,会返回False,在这之后不管输入什么,entry组件都不再有验证功能
我并不希望删除之前的数字更换为新数字时报错,是否有好的解决办法?之后不再进行数据验证的原因是什么?
  1. from tkinter import *
  2. import tkinter.messagebox
  3. import random

  4. secret = random.randint(1,10)

  5. root = Tk()
  6. root.title('数字小游戏')

  7. def test(content):
  8.     if not content.isdigit():
  9.         tkinter.messagebox.showerror(message='请输入数字!')
  10.         print('1')
  11.         return False
  12.     elif int(content)>10 or int(content)<1:
  13.         tkinter.messagebox.showerror(message='请输入1-10的数字!')
  14.         print('2')
  15.         return False
  16.     else:
  17.         print('3')
  18.         return True

  19. def speculate():
  20.     if int(guess.get()) == secret:
  21.         tkinter.messagebox.showinfo(message='正确!数字为:'+str(secret))
  22.     else:
  23.         if int(guess.get()) > secret:
  24.             tkinter.messagebox.showinfo(message='大了')
  25.         else:
  26.             tkinter.messagebox.showinfo(message='小了')

  27. def clearAll():
  28.     e1.delete(0,END)

  29. Label(root, text='不妨猜下 小甲鱼现在心里想的是哪个数字(1-10):').grid(row=0, column=0,columnspan=2, padx=5,pady=5)

  30. guess = StringVar()
  31. testCMD = root.register(test)
  32. e1 = Entry(root, textvariable=guess, validate='key', validatecommand=(testCMD, '%P'), invalidcommand=clearAll, width=50)
  33. e1.grid(row=1,column=0,columnspan=2,padx=10,pady=10)

  34. Button(root, text='OK', command=speculate).grid(row=2, column=0)
  35. Button(root, text='Cancel').grid (row=2, column=1,padx=5,pady=5)

  36. root.mainloop()
复制代码
1.PNG
2.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-13 19:02:46 | 显示全部楼层
该 功能不完善。
直接改用 事件 来处理吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 20:52:23 | 显示全部楼层
自己顶一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-29 18:07:14 | 显示全部楼层
我在本地运行了你的代码,并没有发现你说的不能验证问题。至于删除报错的问题,我发现是因为Backspace会发送一个空字符串给test函数,具体原因不知道。你只需在test函数中加入判空就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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