鱼C论坛

 找回密码
 立即注册
查看: 3851|回复: 8

关于tkinter编写计算器 验证数字输入的小问题

[复制链接]
发表于 2016-5-27 21:52:42 | 显示全部楼层 |阅读模式
5鱼币
tkinter计算器.png
QQ截图20160527214239.jpg
求助各位神通广大的鱼油,这段代码是看完小甲鱼视频之后写的,照道理跟小甲鱼是一样的,但运行出来的计算器无法输入内容。
不仅输入字母符号没有显示,输入数字也不显示了,
问题我猜测出在validatecommand,因为去除这一项就可以输入了,但这一项是用于检测输入是否为数字的,而且跟小甲鱼写的一样,究竟为何他的行我的不行呢
这个太费解了

最佳答案

查看完整内容

你的 这两行代码的validatecommand中的 ‘%p’应该是大写的 ‘%P’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-27 21:52:43 | 显示全部楼层
CasUal000 发表于 2016-5-28 20:42
感谢大神抽空搭救,感激涕零,不过关于这个问题,validatecommand参数去掉之后诚然不影响键入了,但加这 ...

你的
  1. e1=tk.Entry(frame,width=10,textvariable=v1,validate='key',validatecommand=(testf, '%p')).grid(row=0,column=0)
  2. e2=tk.Entry(frame,width=10,textvariable=v2,validate='key',validatecommand=(testf, '%p')).grid(row=0,column=2)
复制代码


这两行代码的validatecommand中的 ‘%p’应该是大写的 ‘%P’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-28 11:51:29 | 显示全部楼层
建议你贴代码,而不是贴图片,这样看的太不舒服了
你把def函数全部写到mainloop外面试试!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-28 18:30:17 | 显示全部楼层
import tkinter as tk
root=tk.Tk()
root.title('计算器')
frame=tk.Frame(root)
frame.pack(padx=10,pady=5)
v1=tk.StringVar();v2=tk.StringVar();v3=tk.StringVar()
def test(content):
    return content.isdigit()
testf=root.register(test)
e1=tk.Entry(frame,width=10,textvariable=v1,validate='key',validatecommand=(testf, '%p')).grid(row=0,column=0)
e2=tk.Entry(frame,width=10,textvariable=v2,validate='key',validatecommand=(testf, '%p')).grid(row=0,column=2)
e3=tk.Entry(frame,width=10,textvariable=v3,state='readonly').grid(row=0,column=4)

l1=tk.Label(frame,text='+');l1.grid(row=0,column=1)
l2=tk.Label(frame,text='=');l2.grid(row=0,column=3)
def clc():
    result=int(v1.get())+int(v2.get())
    v3.set(str(result))
b1=tk.Button(frame,text='计算',command=clc,width=5);b1.grid(row=1,column=2)
tk.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-28 18:31:51 | 显示全部楼层
WylLy 发表于 2016-5-28 11:51
建议你贴代码,而不是贴图片,这样看的太不舒服了
你把def函数全部写到mainloop外面试试!

恩啊,好滴好滴。我贴代码了,请大神指点迷津啊。其实我以为图片看的舒服些呢,因为有语法高亮。单击图片就可以放大了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-5-28 18:47:25 | 显示全部楼层
CasUal000 发表于 2016-5-28 18:31
恩啊,好滴好滴。我贴代码了,请大神指点迷津啊。其实我以为图片看的舒服些呢,因为有语法高亮。单击图片 ...

好吧!给你改了下,你可以看看


  1. import tkinter as tk

  2. def clc():
  3.     result=int(e1.get())+int(e2.get())
  4.     v3.set(str(result))

  5. def test(content):
  6.     return content.isdigit()
  7.        
  8. root=tk.Tk()
  9. root.title('计算器')
  10. frame=tk.Frame(root)
  11. frame.pack(padx=10,pady=5)

  12. v3=tk.StringVar()

  13. testf=root.register(test)
  14. e1=tk.Entry(frame,width=10)
  15. e1.grid(row=0,column=0)
  16. e2=tk.Entry(frame,width=10)
  17. e2.grid(row=0,column=2)
  18. e3=tk.Entry(frame,width=10,textvariable=v3)
  19. e3.grid(row=0,column=4)

  20. l1=tk.Label(frame,text='+');l1.grid(row=0,column=1)
  21. l2=tk.Label(frame,text='=');l2.grid(row=0,column=3)

  22. b1=tk.Button(frame,text='计算',command=clc,width=5);b1.grid(row=1,column=2)
  23. tk.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-28 20:42:56 | 显示全部楼层
WylLy 发表于 2016-5-28 18:47
好吧!给你改了下,你可以看看

感谢大神抽空搭救,感激涕零,不过关于这个问题,validatecommand参数去掉之后诚然不影响键入了,但加这个参数是想用来验证输入是否为数字。能否在保留这一点实现的基础上排除bug啊。我非常疑惑的是小甲鱼当时就加了,他加的好好的,我做同样的事居然不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-5-30 11:36:15 | 显示全部楼层

大神,你是真神仙!拜你相助,我的问题终于解决了,万分万分的感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-22 00:01:13 | 显示全部楼层
如果想验证小数 小数点的键入怎么办
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 22:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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