吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1029|回复: 8
收起左侧

[学习记录] 编写具有验证功能的输入框界面和自我思考

  [复制链接]
甜萝 发表于 2022-11-18 23:41
本帖最后由 paypojie 于 2022-11-19 12:12 编辑

                                                                                实现校验功能的输入框-Tkinter



思路来源  GIF图的网络地址
image.png


自己做的输入框界面
image.png


image.png


自己实现的代码
[Python] 纯文本查看 复制代码
import tkinter as tk
from tkinter import messagebox
win = tk.Tk()

win.geometry('250x200+300+200')
win.resizable(0,0)
# 下面一行代码注释掉 不知道怎么解释 反正加注释之后 其他电脑运行不会报错 我猜测是python在其它电脑执行这行代码时 因为找不到图标文件 所以会报错
# win.iconbitmap(r"C:\Users\33943\Downloads\favicon.ico")
win.title('C语言中文网')

# 新建文本标签
tk.Label(win,text='账号:').grid(row=0,column=0)
tk.Label(win,text='密码:').grid(row=1,column=0)

# 对输入框内的内容进行验证 (校验输入框中的文本)
# 自定义定义验证函数 验证函数的返回值只能为True或者False
# 要求用户输入的内容只能是C语言中文网

def check():
    # 获取输入框的内容 
    if e1.get() == 'C语言中文网':
        messagebox.showinfo('输入正确')
        return True
    else:                                                                                
        messagebox.showwarning('输入不正确')
        # 清除输入框的内容 e1.delete(0,tk.END)的效果和e1.delete(0,'end')一样 
        e1.delete(0,'end')
        # e1.delete(0,tk.END)
        return False

# 不能用这种方式写 不明白为什么用这种方式写会报错 要创建好之后才能进行布局吗? 
# e1 = tk.Entry(win,validate='focusout',validatecommand=check).grid(row=0,column=1)
# e2 = tk.Entry(win).grid(row=1,column=1)

# 上面的两行代码是错误的写法 下面的四行代码是正确的写法 不明白为什么
e1 = tk.Entry(win,validate='focusout',validatecommand=check)
e2 = tk.Entry(win)
e1.grid(row=0,column=1)
e2.grid(row=1,column=1)

# 为啥在创建具有校验功能的输入框时 在创建之后需要赋值给变量 然后在进行放置和布局 为啥就不能直接进行创建加布局
# 思考: 为啥需要通过变量间接进行放置在主窗口和布局 为啥不能一步到位? 创建输入框之后直接进行放置和布局

win.mainloop()

# 注意事项 在创建能够进行内容检查的Entry控件时(输入框)需要在创建好之后赋值给变量 然后对变量使用grid()方法
# 具备验证内容的输入框 需要validate参数(指定验证方式 参数值是字符串参数)以及validatecommand(用户自定义的验证函数)至于invalidcommand参数可有可无


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

99丶 发表于 2022-11-19 00:06
谢谢分享哈。虽然混了这么多年。懵懂~~~
liziming 发表于 2022-11-19 00:06
本帖最后由 liziming 于 2022-11-19 00:10 编辑

对32/33行的错误同样不是很明白
 楼主| 甜萝 发表于 2022-11-19 00:09
99丶 发表于 2022-11-19 00:06
谢谢分享哈。虽然混了这么多年。懵懂~~~

不用谢 有时候我写代码时也一知半解
 楼主| 甜萝 发表于 2022-11-19 00:09

夜已深 睡觉
cloud2010 发表于 2022-11-19 08:03
本帖最后由 cloud2010 于 2022-11-19 09:08 编辑

第32行,是把gird()方法的返回值赋给e1,我没查到gird()的返值,但逻辑一定是不对的。

有点像列表排序,list1.sort(),要是 list2 = list1.sort(),就错了。

可以试下不获取返回值,把e1 =去掉,但控件没有赋值给变量,难以重用。
 楼主| 甜萝 发表于 2022-11-19 12:02
本帖最后由 paypojie 于 2022-11-19 12:10 编辑
cloud2010 发表于 2022-11-19 08:03
第32行,是把gird()方法的返回值赋给e1,我没查到gird()的返值,但逻辑一定是不对的。

有点像列表排序, ...

32行逻辑肯定是不对的
你说的列表排序  列表的sort()方法没有返回值 也不需要赋值给变量
直接
list1.sort()
print(list1)
就行
但是列表有个sorted()方法 括号里面是需要进行传参的 sorted(list)也有返回值 直接print(sorted(list))就行

image.png
 楼主| 甜萝 发表于 2022-11-19 12:09
liziming 发表于 2022-11-19 00:06
对32/33行的错误同样不是很明白

下次写这种带有验证功能的输入框时 注意一下就行
就是创建输入框之后要对其赋值 然后对保存值的变量调用grid()方法即可
cloud2010 发表于 2022-11-19 12:59
paypojie 发表于 2022-11-19 12:02
32行逻辑肯定是不对的
你说的列表排序  列表的sort()方法没有返回值 也不需要赋值给变量
直接

grid() 方法不返回控件对象,不应该获取它的返值。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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