python-Tkinter输入框+验证输入内容(六)

python-Tkinter输入框+验证输入内容(六)

更多原创性能测试文章关注

十年性能测试专家&7DGroup公众号

 

一、普通输入框

from tkinter import *
'''
1、这个程序实现文本框输入。
2、使用grid方法按照Excel表格方式对组件位置进行安排
3、通过Button提交按钮实现获取用户的输入信息。
'''
root = Tk()

Label1 = Label(root,text='会员名称:').grid(row=0,column=0)
Label2 = Label(root,text='会员代号:').grid(row=1,column=0)

v1 = StringVar()
p1 = StringVar()
e1 = Entry(root,textvariable=v1)    # Entry 是 Tkinter 用来接收字符串等输入的控件.
e2 = Entry(root,textvariable=p1,show='#')
e1.grid(row=0,column=1,padx=10,pady=5)  #设置输入框显示的位置,以及长和宽属性
e2.grid(row=1,column=1,padx=10,pady=5)

def show():
    print("会员名称:%s"% e1.get())  # 获取用户输入的信息
    print("会员代号:%s"% e2.get())
Button(root,text='验证信息',width=10,command=show)\
    .grid(row=2,column=0,sticky=W,padx=10,pady=5)

Button(root,text='退出',width=10,command=root.quit)\
    .grid(row=2,column=1,sticky=E,padx=10,pady=5)

mainloop()

二、开启输入框验证

from tkinter import *
'''
开启Entry对输入文本验证功能。
1、实现该功能,需要通过设置validate、validatecommand和invalidcommand三个选项。 
2、启用验证的开关是validate选项,该选项可以设置以下的值:
    focus:当entry组件获得或者失去焦点的时候验证 
    focusin:当entry组件获得焦点的时候验证 
    focusout:当entry组件失去焦点的时候验证 
    key:当输入框被编辑的时候验证 
    all:当出现上面任何一种情况时候验证 
    none:关闭验证功能。默认设置为该选项
3、validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果,一般情况下验证函数只需要知道输入框中的内容即可,
可以通过Entry组件的get()方法来获得该字符串。
4、invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
'''
'''
validatecommand选项指定一个验证函数,该函数只能返回True或者False表示验证结果
invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
'''
root = Tk()
def text():
    if e1.get() == '芝麻开门':
        print('正确')
        return True
    else:
        print('错误')
        return False
def text2():
    print('validatecommand的返回值为False的时候调用了我')
    return False

v = StringVar()
e1 = Entry(root,textvariable=v,validate='focusout',validatecommand=text,\
           invalidcommand=text2)
e2 = Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()


三、为验证函数提供了一些隐藏的功能选项

from tkinter import *
'''
Tkinter 为验证函数提供了一些隐藏的功能选项。
%d:操作代码-0表示删除操作,1表示插入操作,2表示获得、失去焦点或textvariable变量值被修改
%i:1、当用户尝试插入或删除操作时候,该选项表示插入或删除的位置(索引号)
    2、如果是获得、失去焦点或textvariable变量值被修改该而地啊哟用验证函数,那么该值是-1
%P: 1、当输入框的值允许改变的时候,该值有效
    2、该值为输入框的最新文本内容    
%s: 1、该值为调用验证函数前输入框的文本内容
%S:1、当插入或删除操作出发验证函数的时候,该值有效
    2、该选项表示文本被插入和删除的内容
%v: 1、该组件的validate选项的值
%V: 1、调用验证函数的原因
    2、该值是focusin,focusout,ke,或forced(textvariable选项指定的变量值被修改)中的一个
%W: 该组件的名称   
'''
'''
为了使用这些选项,我们可以这样修改我们的validatecommand选项:
validatecommand=(f,s1,s2,……)
其中,f是验证函数名,s1,s2等是额外的选项,这些选项会作为参数依次传给f函数,
我们在使用隐藏的功能选项前需要冷却,这就是register()方法将验证函数包装起来。
'''
root = Tk()
def text(content,reason,name):
    if e1.get() == '芝麻开门':
        print('正确')
        print(content, reason, name)
        return True
    else:
        print('错误')
        print(content,reason,name)
        return False
def text2():
    print('validatecommand的返回值为False的时候调用了我')
    return False

v = StringVar()
testCMD = root.register(text)   #register()方法将验证函数包装起来
e1 = Entry(root,textvariable=v,validate='focusout',\
           validatecommand=(testCMD,'%P','%v','%W'),\
           invalidcommand=text2)
e2 = Entry(root)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()

 

from tkinter import *

master = Tk()

frame = Frame(master)
frame.pack(padx=10,pady=10)

v1 = StringVar()
v2 = StringVar()
v3 = StringVar()

'''
注意在这里我们不能使用entry控件的get()方法来获取输入的内容
因为当validate选项指定为key的时候,有任何的输入操作都会被拦截
到这个函数当中,也就是说先拦截,只有这个函数返回True,那么输入的内容
才会到变量里面去,也就是说我们使用get函数并无法get到数据,get函数在这个
函数之后才会有效,get函数得到的是变量的值。
所以只有使用%P来获得最新的输入框的内容
'''
def test(content):
     if content.isdigit():
          return True
     else:
          return False
#使用了特殊技能的函数需要使用register将其封装起来才可以
testCMD = master.register(test)
e1 = Entry(frame,width=10,textvariable=v1,validate='key',\
           validatecommand=(testCMD,'%P')).grid(row=0,column=0)
Label(frame,text='+').grid(row=0,column=1)

e2 = Entry(frame,width=10,textvariable=v2,validate='key',\
           validatecommand=(testCMD,'%P')).grid(row=0,column=2)
Label(frame,text='=').grid(row=0,column=3)
#e3输入框是显示结果文本框,所以不允许修改里面的值。将state属性设置为state='readonly'只读
e3 = Entry(frame,width=10,textvariable=v3,state='readonly').grid(row=0,column=4)

def calc():
     result=int(v1.get())+int(v2.get())
     v3.set(str(result))
Button(frame,text='计算结果',command=calc).grid(row=1,column=2,padx=5)

mainloop()

 

好的,以下是我编写的Python程序,可以验证泊松定理并展示: ```python import numpy as np from scipy.stats import poisson, binom import matplotlib.pyplot as plt from tkinter import * # 创建GUI界面 root = Tk() root.title("泊松定理验证") root.geometry("500x500") # 创建菜单栏 menu = Menu(root) root.config(menu=menu) # 创建文件菜单 file = Menu(menu) menu.add_cascade(label="文件", menu=file) file.add_command(label="退出", command=root.quit) # 创建帮助菜单 help = Menu(menu) menu.add_cascade(label="帮助", menu=help) help.add_command(label="关于", command=lambda: messagebox.showinfo("关于", "本程序由XXX编写")) # 定义函数,用于绘制泊松分布和二项分布的图像 def plot_distribution(lam, n): # 创建图像 fig, ax = plt.subplots(figsize=(8, 5)) # 绘制泊松分布 x = np.arange(0, n+1) poisson_pmf = poisson.pmf(x, lam) ax.plot(x, poisson_pmf, label="泊松分布") # 绘制二项分布 binom_pmf = binom.pmf(x, n, lam/n) ax.plot(x, binom_pmf, label="二项分布") # 设置图像标题,坐标轴标签和图例 ax.set_title("泊松分布和二项分布") ax.set_xlabel("随机变量") ax.set_ylabel("概率") ax.legend() # 显示图像 plt.show() # 创建标签和输入框 lam_label = Label(root, text="泊松分布参数λ:") lam_label.pack() lam_entry = Entry(root) lam_entry.pack() n_label = Label(root, text="二项分布参数n:") n_label.pack() n_entry = Entry(root) n_entry.pack() # 创建按钮,用于绘制图像 plot_button = Button(root, text="绘制图像", command=lambda: plot_distribution(float(lam_entry.get()), int(n_entry.get()))) plot_button.pack() # 运行GUI界面 root.mainloop() ``` 运行程序后,会弹出一个GUI界面,界面上有两个输入框和一个按钮,用于输入泊松分布的参数λ和二项分布的参数n,并绘制泊松分布和二项分布的图像。 程序使用了Numpy、Scipy和Matplotlib库来进行数学计算和图像绘制。其中,Numpy库用于创建数组、向量和矩阵等数据结构,Scipy库用于进行概率分布的计算和统计分析,Matplotlib库用于绘制图像和可视化数据。 程序中的plot_distribution函数用于绘制泊松分布和二项分布的图像,函数的参数包括泊松分布的参数λ和二项分布的参数n。函数内部使用了Scipy库中的poisson函数和binom函数来计算泊松分布和二项分布的概率质量函数,并使用Matplotlib库来绘制图像。 在程序执行过程中,用户可以输入泊松分布的参数λ和二项分布的参数n,然后点击“绘制图像”按钮,程序会自动绘制泊松分布和二项分布的图像,并在新的窗口中显示出来。用户可以通过调整λ和n的值来观察泊松定理的验证过程。 总之,这个程序可以很好地验证泊松定理并展示,同时也具有一定的可视化设计。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值