鱼C论坛

 找回密码
 立即注册
查看: 1205|回复: 2

[已解决]刚刚学习tkinter中的Entry组件问题

[复制链接]
发表于 2020-8-19 11:55:13 | 显示全部楼层 |阅读模式

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

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

x
  1. from tkinter import *

  2. root = Tk()
  3. root.title("液柱压力计算")

  4. frame = Frame(root)
  5. frame.pack(padx=20,pady=20)
  6. v1 =StringVar()
  7. v2 =StringVar()
  8. v3 =StringVar()
  9. v4 =StringVar()

  10. def test(content):
  11.     if content.isdigit():
  12.         return True
  13.     else:
  14.         return False
  15. testCMD =root.register(test)
  16. Label(frame,text="液柱垂深(m):",font=("宋体",20)).grid(row=0,column=0)
  17. Entry(frame,textvariable=v1,width=20,validate="key",validatecommand=(testCMD,'%P')).grid(row=0,column=1)

  18. Label(frame,text="液体密度(g/cm3):",font=("宋体",20)).grid(row=1,column=0)
  19. Entry(frame,textvariable=v2,width=20,validate="key",validatecommand=(testCMD,'%P')).grid(row=1,column=1)

  20. Label(frame,text="液柱压力(MPa):",font=("宋体",20)).grid(row=3,column=0)
  21. Entry(frame,textvariable=v3,width=20,validate="key",validatecommand=(testCMD,'%P')).grid(row=3,column=1)

  22. Label(frame,text="液柱压力(psi):",font=("宋体",20)).grid(row=4,column=0)
  23. Entry(frame,textvariable=v4,width=20,validate="key",validatecommand=(testCMD,'%P')).grid(row=4,column=1)

  24. def calc():
  25.     result1 = float(v1.get()) *float(v2.get())*9.8/1000
  26.     v3.set(result1)
  27.     v4.set(result1*145.037)

  28. def test_empty():
  29.     v1.set("")
  30.     v2.set("")
  31.     v3.set("")
  32.     v4.set("")

  33. Button(frame,text="计算结果",command=calc,font=("宋体",14),fg="red").grid(row=2,column=1,pady=5)
  34. Button(frame,text="重    置",command=test_empty,font=("宋体",14),fg="red").grid(row=2,column=0,pady=5)

  35. mainloop()
复制代码


刚刚学习了Etry组件,学着写了个简单的计算器,怎样修改让输入框里只能写入小数,test()
最佳答案
2020-8-19 11:57:27
用 try-except

  1. from tkinter import *

  2. root = Tk()
  3. root.title("液柱压力计算")

  4. frame = Frame(root)
  5. frame.pack(padx=20, pady=20)
  6. v1 = StringVar()
  7. v2 = StringVar()
  8. v3 = StringVar()
  9. v4 = StringVar()


  10. def test(content):
  11.     if not content:
  12.         return True
  13.     try:
  14.         float(content)
  15.         return True
  16.     except ValueError:
  17.         return False


  18. testCMD = root.register(test)
  19. Label(frame, text="液柱垂深(m):", font=("宋体", 20)).grid(row=0, column=0)
  20. Entry(frame, textvariable=v1, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=0, column=1)

  21. Label(frame, text="液体密度(g/cm3):", font=("宋体", 20)).grid(row=1, column=0)
  22. Entry(frame, textvariable=v2, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=1, column=1)

  23. Label(frame, text="液柱压力(MPa):", font=("宋体", 20)).grid(row=3, column=0)
  24. Entry(frame, textvariable=v3, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=3, column=1)

  25. Label(frame, text="液柱压力(psi):", font=("宋体", 20)).grid(row=4, column=0)
  26. Entry(frame, textvariable=v4, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=4, column=1)


  27. def calc():
  28.     result1 = float(v1.get()) * float(v2.get()) * 9.8 / 1000
  29.     v3.set(result1)
  30.     v4.set(result1 * 145.037)


  31. def test_empty():
  32.     v1.set("")
  33.     v2.set("")
  34.     v3.set("")
  35.     v4.set("")


  36. Button(frame, text="计算结果", command=calc, font=("宋体", 14), fg="red").grid(row=2, column=1, pady=5)
  37. Button(frame, text="重    置", command=test_empty, font=("宋体", 14), fg="red").grid(row=2, column=0, pady=5)

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

使用道具 举报

发表于 2020-8-19 11:57:27 | 显示全部楼层    本楼为最佳答案   
用 try-except

  1. from tkinter import *

  2. root = Tk()
  3. root.title("液柱压力计算")

  4. frame = Frame(root)
  5. frame.pack(padx=20, pady=20)
  6. v1 = StringVar()
  7. v2 = StringVar()
  8. v3 = StringVar()
  9. v4 = StringVar()


  10. def test(content):
  11.     if not content:
  12.         return True
  13.     try:
  14.         float(content)
  15.         return True
  16.     except ValueError:
  17.         return False


  18. testCMD = root.register(test)
  19. Label(frame, text="液柱垂深(m):", font=("宋体", 20)).grid(row=0, column=0)
  20. Entry(frame, textvariable=v1, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=0, column=1)

  21. Label(frame, text="液体密度(g/cm3):", font=("宋体", 20)).grid(row=1, column=0)
  22. Entry(frame, textvariable=v2, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=1, column=1)

  23. Label(frame, text="液柱压力(MPa):", font=("宋体", 20)).grid(row=3, column=0)
  24. Entry(frame, textvariable=v3, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=3, column=1)

  25. Label(frame, text="液柱压力(psi):", font=("宋体", 20)).grid(row=4, column=0)
  26. Entry(frame, textvariable=v4, width=20, validate="key", validatecommand=(testCMD, '%P')).grid(row=4, column=1)


  27. def calc():
  28.     result1 = float(v1.get()) * float(v2.get()) * 9.8 / 1000
  29.     v3.set(result1)
  30.     v4.set(result1 * 145.037)


  31. def test_empty():
  32.     v1.set("")
  33.     v2.set("")
  34.     v3.set("")
  35.     v4.set("")


  36. Button(frame, text="计算结果", command=calc, font=("宋体", 14), fg="red").grid(row=2, column=1, pady=5)
  37. Button(frame, text="重    置", command=test_empty, font=("宋体", 14), fg="red").grid(row=2, column=0, pady=5)

  38. mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-19 14:12:08 | 显示全部楼层

谢谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 13:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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