2

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の範囲の番号を持つ警報システムのシンプルなインターフェースであるという考えです。

4

1 に答える 1

1

エントリ ウィジェットのvalidatecommandおよび属性を使用します。validateそれを行う方法は、この回答で説明されています: 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()
于 2013-03-22T18:58:05.290 に答える