2015-01-08 96 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