我希望你只能在spinbox
中输入数字,因为在这个问题中,他们在html
和js
中输入,我所做的是以下代码
self.infectedDefauld = tk.StringVar(self)
self.infectedDefauld.set("1")
self.populationSpin = tk.Spinbox(self.leftFrame, from_=1, to=100, width=5, bg=colorFive, fg=colorFour, textvariable=self.totalDefauld, bd=10, relief="flat")
self.populationSpin.pack(side="top", pady=5)
self.totalDefauld.trace(mode="w", callback=self.onValidationPopulation)
def onValidationPopulation (self, varname, elementname, mode):
m = re.search(r'd+', self.populationSpin.get())
if m:
self.totalDefauld.set(m.group(0))
else:
self.totalDefauld.set(0)
问题是,当我写示例2时,它会变为20
与Entry小部件一样,spinbox支持输入验证。这比使用变量跟踪要好,因为跟踪不应该修改正在跟踪的变量。此外,它还可以用来防止输入字符,而不必在输入字符后删除字符。
以下是它在您的代码中的样子:
class Example(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
self.leftFrame = tk.Frame(self)
self.leftFrame.pack(side="left", fill="y")
self.populationSpin = tk.Spinbox(
self.leftFrame, from_=1, to=100,
width=5, bg=colorFive, fg=colorFour,
bd=10, relief="flat",
validate="key",
validatecommand=(self.register(self._validate), "%P")
)
self.populationSpin.pack(side="top", pady=5)
def _validate(self, P):
return P.isdigit()