我希望您只能在 spinbox
中输入数字,就像在 this question 中一样,他们在 html
和 js
中这样做,我所做的是以下代码< /p>
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
答案 0 :(得分:2)
旋转框——就像 Entry 小部件一样——支持 input validation。这比使用变量跟踪要好,因为跟踪不应修改正在被跟踪的变量。此外,它还可用于防止输入字符,而不必在输入字符后将其删除。
在您的代码中可能看起来像这样:
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()