鱼C论坛

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

[已解决]学习Entry组件问题

[复制链接]
发表于 2023-2-14 14:32:37 | 显示全部楼层 |阅读模式

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

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

x
在学习Entry组件时,碰到invalidatecommand参数报错如下:
_tkinter.TclError: unknown option "-invalidatecommand"

请大虾指点,谢谢!

具体代码如下:
root = Tk()

Label(root, text='账号:').grid(row=0)  # 第一行位置第一列
Label(root, text='密码:').grid(row=1)  # 第二行位置第一列

v1 = StringVar()
v2 = StringVar()

def test():
    if e1.get().isalnum():   # 字母和数字时为真
        return True
    else:
        e1.delete(0, END)
        Label(root, text='请重新输入用户名').grid(row=2)

        return False

def test1():
    Label(root, text='我被调用了').grid(row=3)
    return True
# Entry组件还支持验证输入内容的合法性。例如输入框要求输入的是数字,用户输入了字母那就属于“非法”。
# 实现该功能,需要通过设置validate(启用验证)、validatecommand(指定验证函数)和invalidcommand(当validatecommand的返回值为False的时候才被调用)三个选项
e1 = Entry(root, textvariable=v1, validate='focusout', validatecommand=test, invalidatecommand=test1)  # validate='focusout/focusin/focus/key/all/none'
e2 = Entry(root, textvariable=v2, 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())
    e1.delete(0, END)
    e2.delete(0, END)

Button(root, text='芝麻开门', width=10, command=show).grid(row=3, column=0, sticky=W, padx=10, pady=5)
Button(root, text='退出', width=10, command=root.quit).grid(row=3, column=1, sticky=E, padx=10, pady=5)

mainloop()
最佳答案
2023-2-14 15:57:23
把 invalidatecommand 换成 invalidcommand
from tkinter import *
root = Tk()

Label(root, text='账号:').grid(row=0)  # 第一行位置第一列
Label(root, text='密码:').grid(row=1)  # 第二行位置第一列

v1 = StringVar()
v2 = StringVar()

def test():
    if e1.get().isalnum():   # 字母和数字时为真
        return True
    else:
        e1.delete(0, END)
        Label(root, text='请重新输入用户名').grid(row=2)

        return False

def test1():
    Label(root, text='我被调用了').grid(row=3)
    return True
# Entry组件还支持验证输入内容的合法性。例如输入框要求输入的是数字,用户输入了字母那就属于“非法”。
# 实现该功能,需要通过设置validate(启用验证)、validatecommand(指定验证函数)和invalidcommand(当validatecommand的返回值为False的时候才被调用)三个选项
e1 = Entry(root, textvariable=v1, validate='focusout', validatecommand=test, invalidcommand=test1)  # validate='focusout/focusin/focus/key/all/none'
e2 = Entry(root, textvariable=v2, 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())
    e1.delete(0, END)
    e2.delete(0, END)

Button(root, text='芝麻开门', width=10, command=show).grid(row=3, column=0, sticky=W, padx=10, pady=5)
Button(root, text='退出', width=10, command=root.quit).grid(row=3, column=1, sticky=E, padx=10, pady=5)

mainloop()

评分

参与人数 1鱼币 +5 收起 理由
wyhpylc + 5 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2023-2-14 15:57:23 | 显示全部楼层    本楼为最佳答案   
把 invalidatecommand 换成 invalidcommand
from tkinter import *
root = Tk()

Label(root, text='账号:').grid(row=0)  # 第一行位置第一列
Label(root, text='密码:').grid(row=1)  # 第二行位置第一列

v1 = StringVar()
v2 = StringVar()

def test():
    if e1.get().isalnum():   # 字母和数字时为真
        return True
    else:
        e1.delete(0, END)
        Label(root, text='请重新输入用户名').grid(row=2)

        return False

def test1():
    Label(root, text='我被调用了').grid(row=3)
    return True
# Entry组件还支持验证输入内容的合法性。例如输入框要求输入的是数字,用户输入了字母那就属于“非法”。
# 实现该功能,需要通过设置validate(启用验证)、validatecommand(指定验证函数)和invalidcommand(当validatecommand的返回值为False的时候才被调用)三个选项
e1 = Entry(root, textvariable=v1, validate='focusout', validatecommand=test, invalidcommand=test1)  # validate='focusout/focusin/focus/key/all/none'
e2 = Entry(root, textvariable=v2, 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())
    e1.delete(0, END)
    e2.delete(0, END)

Button(root, text='芝麻开门', width=10, command=show).grid(row=3, column=0, sticky=W, padx=10, pady=5)
Button(root, text='退出', width=10, command=root.quit).grid(row=3, column=1, sticky=E, padx=10, pady=5)

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

使用道具 举报

发表于 2023-2-14 19:12:39 | 显示全部楼层
《请大虾指点》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-14 21:02:20 | 显示全部楼层
wyhpylc 发表于 2023-2-14 19:12
《请大虾指点》

请不要误会,大虾是以前的网络用语,意思是电脑高手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-2-14 21:09:47 | 显示全部楼层
liuhongrun2022 发表于 2023-2-14 21:02
请不要误会,大虾是以前的网络用语,意思是电脑高手

az,我网龄比较短,抱歉抱歉,我以为是打错字了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-15 11:46:18 | 显示全部楼层
wyhpylc 发表于 2023-2-14 21:09
az,我网龄比较短,抱歉抱歉,我以为是打错字了

暴露网龄了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-2-15 19:23:13 | 显示全部楼层

是的,本人初二,要不是学编程可能现在还不会用电脑)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 15:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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