吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

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

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

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



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


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


image.png


自己实现的代码
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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, 2025-3-16 04:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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