如何旋转框只允许数字

时间:2021-05-24 04:07:03

标签: python tkinter

我希望您只能在 spinbox 中输入数字,就像在 this question 中一样,他们在 htmljs 中这样做,我所做的是以下代码< /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

1 个答案:

答案 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()
相关问题