我正在使用一个简单的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
答案 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
,但不能说我推荐它。