2015-01-08 55 views
0

我正在使用一个简单的gui与Tkinter来控制我的程序在Windows 7上与python27。此外,我想避免许多额外的软件包,因为我将在稍后冻结该程序,并且希望避免出现“异国情调”软件包的问题。python 27输入字符串使用tkSimpleDialog

在一种情况下,我不得不改变sensorname,我使用一个简单的函数是这样的:

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

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

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

有没有简单的方法来过滤?例如,如果您使用askinteger,则可以设置最小值和最大值,但对于askstring,没有实施某些限制。

干杯最大

回答

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") 

编辑: 替代确实看起来它的滚动自己的对话框类。但是,如果source for tkSimpleDialog是任何指示,那么通过继承Dialog并复制/修改_QueryDialog,_QueryStringaskstring来获得类似的一组功能将是相当多的代码行。

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

+0

thx求救!我想也许除了无限循环之外还有其他选择。例如Thx,我认为每个人都有这个想法,但是有一些语法错误。 – Max

+0

谢谢,编辑(至少找到了那些)。另一种选择是当然滚动你自己的小部件(也许继承tkSimpleDialog)。 – zehnpaard

+0

但有没有其他的选择来捕捉这个?另一个问题是,你不能取消输入或我得到这个错误? – Max