python 27使用tkSimpleDialog输入字符串

时间:2015-01-08 04:34:02

标签: python string python-2.7 input

我正在使用一个简单的gui和Tkinter来使用python27在Windows 7上控制我的程序。此外,我想避免使用许多其他软件包,因为我将在稍后冻结程序,并且我想避免出现问题"异国情调"包。

在一个案例中,我必须更改一个sensorname,我正在使用这样一个简单的函数:

def change_sensorname():
    new_sensorname = tkSimpleDialog.askstring("Sensorname", "Please input the new sensorname")

它工作正常,但在这种情况下如何限制接受的字符?我想在输入窗口关闭之前捕获错误的字符串。如果这是不可能的,我只需打开另一个。

我想限制最大长度,我也想限制不同的字符。例如,只有5个字符,只有来自A-Z和" _"。

的字母

有一种简单的方法来过滤这个吗?例如,如果使用askinteger,则可以设置min和maxvalue,但是对于askstring,没有实现某些限制。

Cheers Max

1 个答案:

答案 0 :(得分:1)

看起来像askstring does not have such functionality,所以做一个循环:

def meets_sensorname_criteria(sensorname):
    max_len = 10
    restricted_chars = ('@', '!', '?')
    return (len(sensorname) < max_len 
            and not any((char in sensorname) for char in restricted_chars))

def change_sensor_name():
    new_sensorname = tkSimpleDialog.askstring("Sensorname", "Please input the new sensorname")
    while not meets_sensorname_criteria(new_sensorname):
        # Some warning alert here to explain expected input might be good
        new_sensorname = tkSimpleDialog.askstring("Sensorname", "Please input the new sensorname")

修改 替代方案确实看起来像滚动你自己的Dialog类。但是,如果source for tkSimpleDialog是任何指示,那么通过继承Dialog并复制/修改_QueryDialog,{{1}来获得类似的功能将会有相当多的代码行。 }和_QueryString

可以尝试直接继承askstring,但不能说我推荐它。