Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在python的条目小部件中达到字符串的最大长度后,BACKSPACE选项卡不起作用_Python 2.7_Tkinter - Fatal编程技术网

Python 2.7 在python的条目小部件中达到字符串的最大长度后,BACKSPACE选项卡不起作用

Python 2.7 在python的条目小部件中达到字符串的最大长度后,BACKSPACE选项卡不起作用,python-2.7,tkinter,Python 2.7,Tkinter,我创建了一个Tkinter输入框小部件,它只接受长度为6的整数。我给出了一个输入值“1465146”。它已达到最大限制,但当我想使用“退格键”删除/编辑插入的文本时,它不起作用。我无法删除或编辑文本 import Tkinter as tk class Example(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) vcmd = (self.register

我创建了一个Tkinter输入框小部件,它只接受长度为6的整数。我给出了一个输入值“1465146”。它已达到最大限制,但当我想使用“退格键”删除/编辑插入的文本时,它不起作用。我无法删除或编辑文本

import Tkinter as tk

class Example(tk.Frame):

    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        vcmd = (self.register(self.onValidate),
            '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W')
        self.entry = tk.Entry(self, validate="key", validatecommand=vcmd)
        self.text = tk.Text(self, height=10, width=40)
        self.entry.pack(side="top", fill="x")
        self.text.pack(side="bottom", fill="both", expand=True)

    def onValidate(self, d, i, P, s, S, v, V, W):
        valid=self.Check_num(s,S)   
        return valid

    def Check_num(self,s,S):
        if S in '\b1234567890' and len(s)<=6:   
            return True
        else:return False


if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both")
    root.mainloop()
将Tkinter作为tk导入
类示例(tk.Frame):
定义初始化(自身,父级):
tk.Frame.\uuuu init\uuuuu(自,父)
vcmd=(self.register(self.onValidate)),
“%d”、“i”、“P”、“s”、“s”、“v”、“v”、“W”)
self.entry=tk.entry(self,validate=“key”,validatecommand=vcmd)
self.text=tk.text(self,高度=10,宽度=40)
自进式包装(side=“top”,fill=“x”)
self.text.pack(side=“bottom”,fill=“both”,expand=True)
def onValidate(自我、d、i、P、s、s、v、v、W):
有效=自我检查数量
返回有效
def检查数量(自身):

如果当您输入诸如“1234567”之类的值并按下退格键时,“\b1234567890”中的S和len,您将执行两项检查:是否在允许的字符之一中插入或删除字符,以及编辑前的文本长度是否小于七。在这种情况下,在点击退格之前,长度正好是7,因此不允许编辑

如果要确保小部件仅允许您输入6位数字,则应比较
%p
参数的长度,如果允许编辑,则该参数是最终字符串

此外,在允许的字符列表中包含
\b
,并不能达到您认为的效果。它将允许您在字符串中插入一个文本
\b
(control-h,ascii字符8)。如果只需要数字,则应仅检查数字。按backspace键时,
s
将不会显示
\b


最后,检查
s
是否在
1234567890
中并不能完全实现您认为它将要实现的功能。假设
s
是单个字符,但如果用户将某些内容粘贴到输入字段中,则可以是多个字符。例如,它将阻止您将字符串“21”复制和粘贴到输入字段中,因为两字节序列“21”不在字符串“1234567890”中

你做了什么来调试这个问题?按下退格键时,是否检查了
s
s
是什么?您知道当您单击退格键时,
s
s
应该包含哪些内容吗?知道。我调试了当我按backspace键时,我已经给出了输入“1465146”。“S”的值为“6”,而“S”的值为“1465146”。谢谢@Bryan.%P参数帮助我解决了这个问题。