鱼C论坛

 找回密码
 立即注册
查看: 1227|回复: 6

python的tkinter的一点小问题

[复制链接]
发表于 2017-12-12 15:37:35 | 显示全部楼层 |阅读模式

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

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

x
学了会python的tkinter,写了一个段小的代码,界面运行没有问题,不过想附加一点小功能。

我想在输入框的界面后面加上对数值的判断。如下图, 1513063991(1).jpg



这是我写的代码。初学,好多东西不明白,多多指教!

#p15_test_2017.12.11
from tkinter import *

root=Tk()
root.title("TS-计算体积")
#用来设置初始窗口的位置和大小,前面的是大小,后面是初始位置
root.geometry("600x400+120+50")

R1=StringVar()
H1=StringVar()
V1=StringVar()

def test(content):
        if content.isdigit():
                return True
        else:
                print("输入错误信息")
                return False

testCMD=root.register(test)

Label(root,text="圆筒半径R(m):").place(x=20,y=20)
Label(root,text="圆筒高度H(m):").place(x=20,y=50)
Label(root,text="圆筒体积V(m3):").place(x=20,y=80)

Entry(root,textvariable=R1,width=15,validate="focusout",\
                validatecommand=(testCMD,'%P')).place(x=180,y=20)
Entry(root,textvariable=H1,width=15,validate="focusout",\
                validatecommand=(testCMD,'%P')).place(x=180,y=50)
Entry(root,textvariable=V1,width=15,validate="focusout",\
                validatecommand=(testCMD,'%P')).place(x=180,y=80)

def calc():
        result=int(R1.get())*int(R1.get())*3.1416*int(H1.get())
        V1.set(result)

Button(root,text="计算",command=calc).place(x=100,y=110)

mainloop()


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-12 15:42:29 | 显示全部楼层
最简单的方法大概是加一个线程,一直get输入框里的内容,进行判断是否为纯数字,如果不是就用Label或者text这些组件显示错误提示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-18 09:48:01 | 显示全部楼层
Charles未晞 发表于 2017-12-12 15:42
最简单的方法大概是加一个线程,一直get输入框里的内容,进行判断是否为纯数字,如果不是就用Label或者text ...

嗯能否帮我在原代码的基础上写一下,体会比较深一点。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-18 18:19:05 | 显示全部楼层
这个楼主说的 数据 是什么数据啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-18 18:55:07 | 显示全部楼层
  1. from tkinter import *

  2. root=Tk()
  3. root.title("TS-计算体积")
  4. #用来设置初始窗口的位置和大小,前面的是大小,后面是初始位置
  5. root.geometry("600x400+120+50")

  6. R1=StringVar()
  7. H1=StringVar()
  8. V1=StringVar()

  9. def test1(content):
  10.         if content == "" or content.isdigit():
  11.                 return True
  12.         else:
  13.                 e1.delete(0,END)
  14.                 e1.insert(0,"输入错误信息")
  15.                 return False

  16. def test2(content):
  17.         if content == "" or content.isdigit():
  18.                 return True
  19.         else:
  20.                 e2.delete(0,END)
  21.                 e2.insert(0,"输入错误信息")
  22.                 return False

  23. testCMD1=root.register(test1)
  24. testCMD2=root.register(test2)

  25. Label(root,text="圆筒半径R(m):").place(x=20,y=20)
  26. Label(root,text="圆筒高度H(m):").place(x=20,y=50)
  27. Label(root,text="圆筒体积V(m3):").place(x=20,y=80)

  28. e1 = Entry(root,textvariable=R1,width=15,validate="focusout",\
  29.                 validatecommand=(testCMD1,"%P"))
  30. e1.place(x=180,y=20)

  31. e2 = Entry(root,textvariable=H1,width=15,validate="focusout",\
  32.                 validatecommand=(testCMD2,"%P"))
  33. e2.place(x=180,y=50)
  34. e3 = Entry(root,textvariable=V1,width=15,state = "readonly")
  35. e3.place(x=180,y=80)

  36. def calc():
  37.         result=int(R1.get())*int(R1.get())*3.1416*int(H1.get())
  38.         V1.set(result)

  39. Button(root,text="计算",command=calc).place(x=100,y=110)

  40. mainloop()
复制代码


在你的基础上简单的修改了一下,希望能给你提供思路,其实我都不知道这个 root.register(test) 是什么作用的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-20 15:32:05 | 显示全部楼层
°蓝鲤歌蓝 发表于 2017-12-18 18:55
在你的基础上简单的修改了一下,希望能给你提供思路,其实我都不知道这个 root.register(test) 是什么 ...

嗯,我想能不能用一个函数来验证,因为现在只有两个输入框,两个函数能解决,如果下次遇到的情况是需要输入100个输入框,不可能写100个test函数来验证啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-20 15:40:40 | 显示全部楼层
拂晓9976 发表于 2017-12-20 15:32
嗯,我想能不能用一个函数来验证,因为现在只有两个输入框,两个函数能解决,如果下次遇到的情况是需要输 ...

你说的我也想过,还试了一下,不过没完成。

问题在于这个 content 怎么写成具体是哪个Entry里的内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 19:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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