设置ttk.entry中的最大数据长度,并仅限制为整数

时间:2013-03-22 18:27:42

标签: python-3.x user-interface tkinter ttk tkinter-entry

我想知道如何设置允许进入TTK输入字段的最大字符数。我也想限制只输入整数的条目,似乎没有找到很多在线。无论如何,这是我的代码:

from tkinter import *
from tkinter import ttk


root = Tk()
root.title("Alarm Interface")
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

code = IntVar()


code_entry= ttk.Entry(mainframe, width=7, textvariable=code)
code_entry.grid(columnspan = 2, column=2, row=5, sticky=(W, E))

ttk.Button(mainframe, text="1").grid(column=1, row=1, sticky=NW)
ttk.Button(mainframe, text="2").grid(column=2, row=1, sticky=NW)
ttk.Button(mainframe, text="3").grid(column=3, row=1, sticky=NW)
ttk.Button(mainframe, text="4").grid(column=1, row=2, sticky=NW)
ttk.Button(mainframe, text="5").grid(column=2, row=2, sticky=NW)
ttk.Button(mainframe, text="6").grid(column=3, row=2, sticky=NW)
ttk.Button(mainframe, text="7").grid(column=1, row=3, sticky=NW)
ttk.Button(mainframe, text="8").grid(column=2, row=3, sticky=NW)
ttk.Button(mainframe, text="9").grid(column=3, row=3, sticky=NW)
ttk.Button(mainframe, text="Clear").grid(column=1, row=4, sticky=NW)
ttk.Button(mainframe, text="0").grid(column=2, row=4, sticky=NW)
ttk.Button(mainframe, text="Delete").grid(column=3, row=4, sticky=NW)

ttk.Label(mainframe, text="Enter Code:").grid(column=1, row=5, sticky=W)




for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

root.mainloop()

谢谢,想法是这是一个简单的报警系统界面,数字范围从0到9。

1 个答案:

答案 0 :(得分:1)

您想要使用条目小部件的validatecommandvalidate属性。该答案中描述了如何做到这一点:https://stackoverflow.com/a/4140988/7432

这是一个简单的示例,它显示了如何禁止任何不会导致0到999之间的数字的输入(但允许空字符串):

import Tkinter as tk
import ttk

class ConstrainedEntry(ttk.Entry):
    def __init__(self, *args, **kwargs):
        ttk.Entry.__init__(self, *args, **kwargs)

        vcmd = (self.register(self.on_validate),"%P")
        self.configure(validate="key", validatecommand=vcmd)

    def disallow(self):
        self.bell()

    def on_validate(self, new_value):
        try:
            if new_value.strip() == "": return True
            value = int(new_value)
            if value < 0 or value > 999:
                self.disallow()
                return False
        except ValueError:
            self.disallow()
            return False

        return True

class Example(tk.Frame):
    def __init__(self, *args, **kwargs):
        tk.Frame.__init__(self, *args, **kwargs)
        l = ttk.Label(self, text="Enter a number between 0 and 999:", anchor="w")
        e = ConstrainedEntry(self, width=4)
        l.pack(side="top")
        e.pack(side="top")

root = tk.Tk()
Example(root).pack(side="top", fill="both", expand=True)
root.mainloop()