Python 验证命令在Tkinter中不起作用

Python 验证命令在Tkinter中不起作用,python,validation,tkinter,Python,Validation,Tkinter,在这个程序中,我试图检查输入是否匹配某个单词(在本例中为“APPLE”),但vcmd似乎无法识别-有什么想法吗 from tkinter import * class Window(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.vmcd1 = parent.register(self.validate_entry) self.title =

在这个程序中,我试图检查输入是否匹配某个单词(在本例中为“APPLE”),但vcmd似乎无法识别-有什么想法吗

from tkinter import *

class Window(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)

        self.vmcd1 = parent.register(self.validate_entry)

        self.title = Label(self, text='Enter here:')
        self.title.pack()

        self.entry = Entry(self, validatecommand=(self.vcmd1,'%P'))
        self.entry.pack()


        self.entered=Label(self, text='You entered')
        self.entered.pack()

    def callback(self):
        self.entered.config(text='You entered: ' + self.entry.get())

    def validate_entry(self, entry):
        print('Code validates entry')
        if entry == 'APPLE':
            print('This input is correct.')
        else:
            pass


root = Tk()
frame = Window(root)
frame.pack()
root.mainloop()

总结评论中的内容:

  • 验证命令名中有一个输入错误:您编写了
    self.vmcd1=…
    而不是
    self.vcmd1=…

  • 验证命令应返回
    True
    (接受更改)或
    False
    (拒绝更改)。如果我正确理解了您想要实现的目标,您的函数应该始终返回
    True
    ,但是如果条目的内容是“APPLE”,请执行一些特殊操作

    def validate_entry(self, entry):
        print('Code validates entry')
        if entry == 'APPLE':
            print('This input is correct.')
        return True
    
  • 由于
    validate
    选项的默认值为“无”,因此永远不会执行validate命令。您需要将此选项设置为“键”,例如,如果您希望在用户每次键入内容(更多可能的值)时检查条目的内容


总结评论中的内容:

  • 验证命令名中有一个输入错误:您编写了
    self.vmcd1=…
    而不是
    self.vcmd1=…

  • 验证命令应返回
    True
    (接受更改)或
    False
    (拒绝更改)。如果我正确理解了您想要实现的目标,您的函数应该始终返回
    True
    ,但是如果条目的内容是“APPLE”,请执行一些特殊操作

    def validate_entry(self, entry):
        print('Code validates entry')
        if entry == 'APPLE':
            print('This input is correct.')
        return True
    
  • 由于
    validate
    选项的默认值为“无”,因此永远不会执行validate命令。您需要将此选项设置为“键”,例如,如果您希望在用户每次键入内容(更多可能的值)时检查条目的内容


定义
self.vmcd1
,然后使用
self.vcmd1
作为validatecommand。这是一个输入错误。此外,validatecommand函数应该只返回
True
False
以允许或禁止编辑。您应该使用
validate
参数定义何时验证条目,您可以在
validate=
下找到选项。除了前面提到的问题外,您的
validate_条目
还有问题:除非用户将“APPLE”粘贴到小部件中,否则没有任何内容会通过验证。您定义
self.vmcd1
,然后使用
self.vcmd1
作为validatecommand。这是一个输入错误。此外,validatecommand函数应该只返回
True
False
以允许或禁止编辑。您应该使用
validate
参数定义何时验证条目,您可以在
validate=
下找到选项。除了前面提到的问题外,您的
validate_条目也有问题:除非用户将“APPLE”粘贴到小部件中,否则任何内容都不会通过验证。