2012-04-18 59 views
0

我要如何使用Tcl/Tk的焦點的當前窗口。 我嘗試使用焦點命令,但它返回併爲空字符串。Tk的當前獲取窗口路徑焦點

我有同樣的願望會話多發的窗戶。每個窗口都有 同一組按鈕但數據不同。我需要找出按下按鈕的窗口的 路徑。

回答

4

focus命令沒有參數返回當前Tk的插件與聚焦或者如果沒有Tk的插件具有焦點空結果。你可以通過啓動Tk並打包一些窗口來測試,然後使用after 2000 {puts [focus]}並在2秒鐘內點擊一個窗口。

但是!你想才達到什麼聲音通過綁定按鈕命令和自身傳遞給命令過程做得更好:

pack [button .b -text Click -command [list Click .b]] 
proc Click {widget args} {puts [list $widget $args [focus]]} 

如果添加一個條目部件在那裏你會發現焦點不一定等於按鈕控件,當你點擊它。這需要首先按下按鈕。

+0

感謝patthoyts。我嘗試使用焦點,但它返回一個空字符串。我想我需要首先設定焦點才能運作。我會繼續前進,現在使用第二種方法。 – 2012-04-18 16:35:32

+0

@balaji如果鍵盤焦點在Tk窗口中不是_actively_,'[focus]'返回一個空字符串。在焦點已返回到交互式終端的調試會話中,這往往很重要。 :-) – 2012-04-19 09:23:21

+0

謝謝Donal,明白了。 – 2012-04-20 01:22:02

0

雖然尋找別的東西,我碰到這個,雖然這是一個有點老了。在TCL,將有更好的方式來做到這一點。對於 有一點,您不能確定「活動窗口」是腳本運行時所需的窗口。知道按下哪個窗口/按鈕的方法是將其嵌入到腳本代碼中。使用「-command」參數將代碼附加到Tk窗口/小部件時,可以使用類似「[list mycommand uniqueid]」的內容,並且Tcl解釋器在執行之前會附加任何已記錄的參數。一個很好的例子就是在Tcl中創建一個TCP套接字服務器。命令是「socket -server <procname> <port>」,其中<procname>在客戶端嘗試連接到<端口>時被調用。不過,這並不一定是一個簡單的PROCNAME,它可以是可以eval'd任何Tcl命令:將創建端口12345監聽套接字。當一個客戶端嘗試「-server [名單MYSERVER富巴] 12344插座」連接到服務器,Tcl將調用(技術上,它會通過「eval」運行)「myserver foo bar <chan> <addr> <port>」,其中chan,addr和port是通過添加到命令的參數套接字命令。這些記錄在Tcl套接字命令頁面中。

這裏的重要組成部分,是瞭解Tcl的稱爲「MYSERVER」你給那麼它追加額外的參數到最後的參數。然後,您可以使用「socket -server myserver foo baz 12346」在另一個套接字上監聽端口12346,並在客戶端連接時調用/ eval「myserver foo baz <chan> <addr> <port>」 。然後你可以編寫一個單獨的「myserver」proc作爲「proc myserver {argFoo argBar argChan argAddr argPort} {if {$argBar eq "bar"} {puts "do somthing"} else if {$argBar eq "baz"} {puts "do something else"} else {puts "Whatcha' talkin' about, foo'!?"}}」。

是Tk按鈕例如:

button .pressme -text "Press Me!" -command [list cmdYouPressed [pid]] 
proc cmdYouPressed {argPID args} { 
    puts "You pressed the button for $argPID!" 
} 

如果你運行這個片段在多個不同的Tcl/Tk interps,你可以告訴得到了由進程ID(按下其中一個多數民衆贊成在[PID]是爲)知道在哪個運行腳本中按下哪個按鈕。當然,您可以創建自己的唯一標識符而不是使用[pid],就像我在foo bar/baz套接字示例中所做的一樣。

這樣做消除了許多問題,只是試圖獲取活動窗口,例如「如果窗口在命令運行時未激活,如果您有某種自動化/遠程控制正在運行,會發生什麼情況並且它正在響應背景窗口?「它也使得它不必在運行多個版本的腳本時嘗試確定窗口/資源ID - 每個腳本都擁有它自己的系統唯一進程ID。

(很抱歉,如果我沒有說清楚或過於簡潔..我的鍵盤不能正常工作,這就是爲什麼我在別人尋找的東西,幫我「自動更正」的錯誤。)