1
A
回答
1
當我需要獨特的小部件的名稱,我用的是這樣的:
variable sequencecounter 0; # Don't touch outside this code!
proc unique {{parent ""}} {
variable sequencecounter
while {[winfo exists [set w $parent.w$sequencecounter]]} {
incr sequencecounter
}
return $w
}
這是保證返回一個不存在窗口小部件名稱。 (Tk保證運行單線程,所以你知道沒有討厭的競態條件。)像這樣使用它:
set top [toplevel [unique]]
set btn [button [unique $top] -text "Hi" -command { exit }]
pack $btn
1
有可能是做一些華麗的方式,但對我來說,當我需要獨特的名字,我只構成一個出時間數據,像
set systemTime [clock seconds];
set myname [concat [clock format $systemTime -format %H%M%S] ".myext"]
等等,等等有很多不同的格式化可能性。
這不是優雅的,但我有它的工作在我的東西,它是有用的,也如果你需要保持一定的軌道。
+0
如果你在同一秒內生成多個名字,這很可能會中斷如果你正在這樣做來生成窗口路徑名。 – 2012-01-15 20:26:48
+0
這是真的。就我而言,我會做一些進一步的檢查,以確保它在最後附加一些額外的數據(如果有必要),以確保它更獨特。如果您需要以「用戶」速度創建獨特的名稱(例如,gui),但是如果您讓它們以「程序」速度運行(例如,循環等),則我認爲它非常方便 – JasonBourne 2012-01-16 05:25:27
相關問題
- 1. Tk窗口部件/窗口路徑名的訪問控件
- 2. tcl/tk按鈕或頂層路徑名約定
- 3. 如何從TK頂層窗口返回值?
- 4. 生成唯一名稱?
- 5. 的Tcl/Tk:如何銷燬根窗口時關閉頂層窗口
- 6. 如何生成唯一的文件名或路徑?
- 7. 將頂層窗口重疊在另一個頂層窗口
- 8. 添加按鈕時TCL/TK錯誤的窗口或路徑名稱
- 9. 如何爲每個JSON值生成唯一名稱
- 10. Windows IupLUA,iupalarm - 如何使它成爲最頂層的窗口?
- 11. 在Ruby中如何使用tk funktion「tkwait窗口名稱」?
- 12. 如何使窗口絕對最頂層?
- 13. 如何使Outlook Compose窗口最頂層?
- 14. 配售窗口後,頂層窗口
- 15. 透明頂層窗口
- 16. C#最頂層窗口
- 17. 在最頂層窗口
- 18. 如何驗證窗口是使用UIAutomation的最頂層窗口?
- 19. 如何從JSF clientId生成唯一的JavaScript變量名稱?
- 20. 如何獲取python中最頂層(入口)腳本的名稱?
- 21. Tk的當前獲取窗口路徑焦點
- 22. Rails:如何生成路徑?
- 23. 如何爲PHP中的$ _SESSION組成一個唯一的名稱?
- 24. 爲測試生成唯一模式名稱
- 25. 爲PrimeFaces remoteCommand生成並使用唯一的名稱
- 26. IP名稱和路徑顯示在窗口上
- 27. 在VS2008中顯示解決方案路徑窗口名稱
- 28. 如何爲options_from_collection_for_select中的每個選項動態生成唯一的名稱?
- 29. 如何判斷一個ChildWindow是否是最頂層的窗口
- 30. 如何使窗口最頂層只有一次
但請注意這會創建一個_subtle_內存泄漏,這是widget名稱本身的獨特組件。是的,這聽起來很瘋狂,但它是真實的,如果你有一個長時間運行的程序,隨着時間的推移創建許多小部件,這可能是一個問題。 (所有其他創建獨特名稱的方案也會有相同的泄漏問題,因爲一些奇怪的原因,Tk實習路徑名組件!) – 2012-01-15 22:12:09