0

在制作 Windows Calc 的副本时,我遇到了 Entry 小部件的问题。

我已经制作了类似于 windows calc 的按钮,并且我还绑定了键盘 1234567890 + - / * % 按钮,以制作与 calc 按钮相同的东西。主要的问题是我希望条目只存储数字并让用户只输入数字......但是在搜索了许多关于 validatecommand 的主题并查看了 windows calc 之后,我决定 validatecommand 不是我需要的东西 - 我不需要'不知道如何使它验证用户输入到输入框的每个字符,并且在进行键盘绑定后,当我在输入框中并按“1”写它两次的数字时,因为键盘事件绑定插入输入框也有“1”。

所以,我想做的是让条目小部件像 Windows Calc.exe 输入框一样工作。windows calc 输入框不允许您插入任何其他字符,然后是数字,也不允许您将光标放入输入框...,它看起来像这样:-entrybox 已禁用但看起来像 ENABLED -数字和操作可以通过计算按钮或键盘按钮进行

我尝试通过在开始时禁用条目小部件来获得这种效果,并使所有按钮的功能如下: - 启用条目小部件 - 插入数字(小部件必须处于启用状态?还是正常?(不记得名称)状态让您向其中插入一些东西)-禁用条目小部件

它像我想要的那样工作......但它看起来不像我想要的那样。是否有可能将 Entry 小部件禁用的 bg 颜色更改为正常?或者也许有另一种方法来制作这样的输入框?:S

4

1 回答 1

2

方法是使用条目小部件的validatecommandvalidate选项。这种情况正是这些功能的用途。

你说你“不知道如何让它验证用户输入到输入框的每个字符”。如果您将validate属性设置为"key",这将导致您的 validate 命令在每次按键时被调用。

不幸的是,这是 Tkinter 的一个记录不足的功能,尽管它对 Tk 的记录很好。这是一个执行一些非常基本检查的工作示例:

import Tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        # define a command to be called by the validation code.  %P
        # represents the value of the entry widget if the edit is
        # allowed. We want that passed in to our validation comman so
        # we can validate it. For more information see
        # http://tcl.tk/man/tcl8.5/TkCmd/entry.htm#M7
        vcmd = (self.register(self._validate), '%P')
        e = tk.Entry(self, validate="key", validatecommand=vcmd)
        e.pack()

    def _validate(self, P):
        # accept the empty string, "." or "-." (to make it possible to
        # enter something like "-.1"), or any string that can be
        # converted to a floating point number.
        try:
            if P in (".", "-", "-.", ""):
                return True
            n = float(P)
            return True
        except:
            self.bell()
            return False

app=SampleApp()
app.mainloop()

如果您搜索此站点,[tkinter] validatecommand您会发现许多其他示例。

于 2012-08-20T17:10:12.007 回答