我有一個Tcl腳本控制自動測試儀。到目前爲止,它是一個控制檯程序,它在命令提示符下接受用戶輸入。一位同事寫了一個可以由腳本啓動的Tk GUI。我從來沒有用過Tk,所以我不瞭解很多語法。Tcl/Tk綁定需要全局變量?
在測試開始時,腳本必須從操作員那裏獲得一個單元序列號。這是我的同事寫道做到這一點的功能:
proc GetSerialNumber {} {
global gUserInterfaceBarCode
DisplayMessage "Enter serial number:"
.c.serialnumberbox configure -state normal
focus .c.serialnumberbox
bind .c.serialnumberbox <Return> { set gUserInterfaceBarCode [.c.serialnumberbox get] }
tkwait variable gUserInterfaceBarCode
#grid forget .c.serialnumberbox
.c.serialnumberbox configure -state disabled
}
DisplayMessage
是,只是在GUI更新文本標籤的過程。
我不喜歡這個事實,即有一個全局變量gUserInterfaceBarCode
用於保存序列號。有什麼方法可以改用局部變量,並讓程序返回該值?
如果我理解正確,如果行tkwait variable gUserInterfaceBarCode
取出,此功能不會阻止,直到該變量更改。這是從GUI元素捕獲用戶輸入的最佳方式嗎?
Tk腳本還會在其自己的幫助程序中將任何事情變得模糊不清,因爲它更容易處理範圍。 –
由於大多數Tcl OO擴展允許對象實例變量看起來像名稱空間變量,所以您還可以使用OO擴展來封裝變量。第三種方法是爲所有狀態使用一個全局數組變量,而不是爲每個值使用一個變量名稱。 – schlenk