鱼C论坛

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

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

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

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

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

x
from tkinter import *

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

frame = Frame(root)
frame.pack(padx=20,pady=20)
v1 =StringVar()
v2 =StringVar()
v3 =StringVar()
v4 =StringVar()

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

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

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

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

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

def test_empty():
    v1.set("")
    v2.set("")
    v3.set("")
    v4.set("")

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

mainloop()

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

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

frame = Frame(root)
frame.pack(padx=20, pady=20)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
v4 = StringVar()


def test(content):
    if not content:
        return True
    try:
        float(content)
        return True
    except ValueError:
        return False


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

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

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

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


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


def test_empty():
    v1.set("")
    v2.set("")
    v3.set("")
    v4.set("")


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

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

使用道具 举报

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

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

frame = Frame(root)
frame.pack(padx=20, pady=20)
v1 = StringVar()
v2 = StringVar()
v3 = StringVar()
v4 = StringVar()


def test(content):
    if not content:
        return True
    try:
        float(content)
        return True
    except ValueError:
        return False


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

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

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

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


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


def test_empty():
    v1.set("")
    v2.set("")
    v3.set("")
    v4.set("")


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

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

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-19 07:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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