我想實現樣例結果,如何添加一個checkbutton到labelframe,如果選擇checkbutton,框架將被啓用,謝謝! sample在labelframe中添加一個checkbutton?
回答
當我看到這個問題,吉米的評論,他已經解決了這個問題,我在想,還有應該如何解釋做到這一點。當我開始這樣做時,吉米已經添加了這樣的解釋。無論如何,我發佈我的建議,希望它會有用。
此答案部分基於Jeremy Cowgar的頁面http://wiki.tcl-lang.org/20054上的示例,在「啓用其內容的Labelframes」按鈕下。我對代碼進行了簡化,重構和泛化,希望在這樣做時不會引入錯誤。我已經嘗試了代碼,但沒有完全測試它。
我曾用「經典」的小部件(在命名空間tk
)在這個例子:剛剛命名空間更改爲ttk
(如ttk::labelframe
等),以獲得爲主題的小部件。有時需要更多的更改,因爲選項或子命令是不同的,但至少在本示例的範圍內它們的工作原理是相同的。
第一個對象是設置labelframe
,它將被啓用。它獲得一個checkbutton
作爲labelwidget(通過配置-labelwidget
選項):checkbutton獲取一個全局變量和一個調用過程的命令腳本。只有labelframe需要管理(使用pack
,grid
或其他),它自己管理checkbutton。 checkbutton可能是.greeter
的子項,但這樣它將與labelframe中的小部件截然不同。
tk::labelframe .greeter
tk::checkbutton .greeterEnabler -text {Say Hello} -variable greeterEnabled -command greeterEnablerAction
.greeter configure -labelwidget .greeterEnabler
pack .greeter -fill x -expand yes
proc greeterEnablerAction {} {
if {$::greeterEnabled} {
set state normal
} else {
set state disabled
}
foreach child [winfo children .greeter] {
$child configure -state $state
}
}
labelframe中充滿了小部件,在本例中只有兩個部件。它們被製成labelframe的兒童,即他們的窗戶路徑始於.greeter
。
set greeterName World
tk::entry .greeter.name -textvariable greeterName
tk::button .greeter.button -text {Do It} -command {puts "Hello, $greeterName"}
設置labelframe的初始狀態。 greeterEnablerAction
程序可以直接調用,而不是使用invoke
調用。
set greeterEnabled 1
.greeterEnabler invoke
labelframe的孩子需要明確管理。
pack {*}[winfo children .greeter] -fill x
小工具獨立於labelframe的,也可以添加:
tk::button .bt2 -text Exit -command exit
pack .bt2 -fill x -expand yes
完整的程序再次(在Tk
包沒有如果代碼是在TK運行需要 - 啓用殼如wish
):
package require Tk
# set up the labelframe with a checkbutton as enabler
tk::labelframe .greeter
tk::checkbutton .greeterEnabler -text {Say Hello} -variable greeterEnabled -command greeterEnablerAction
.greeter configure -labelwidget .greeterEnabler
pack .greeter -fill x -expand yes
proc greeterEnablerAction {} {
if {$::greeterEnabled} {
set state normal
} else {
set state disabled
}
foreach child [winfo children .greeter] {
$child configure -state $state
}
}
# fill it with widgets
set greeterName World
tk::entry .greeter.name -textvariable greeterName
tk::button .greeter.button -text {Do It} -command {puts "Hello, $greeterName"}
set greeterEnabled 1
.greeterEnabler invoke
pack {*}[winfo children .greeter] -fill x
# this button is independent of the labelframe
tk::button .bt2 -text Exit -command exit
pack .bt2 -fill x -expand yes
文檔: button (widget), checkbutton (widget), exit, foreach, grid, if, labelframe (widget), pack, package, proc, puts, set, winfo, {*} (syntax)
太棒了!感謝您的詳盡和有用的解釋!這真的讓我受益匪淺。 – Jimmy
謝謝多納爾的意見,下面列出我的解決方案:
frame .f
labelframe .f.lf
checkbutton .f.lf.cb -text sample
label .f.lf.lb -text "This is for test"
.f.lf configure -labelwidget .f.lf.cb
pack .f
pack .f.lf
pack .f.lf.lb
- 1. Tkinter - 爲每個LabelFrame添加滾動條
- 2. 添加多個Checkbutton並將結果存儲在列表中
- 3. 內創建一個LabelFrame一個Tkinter的帆布
- 4. Tkinter得到一個CheckButton的選定值
- 5. 如何在gtk中選擇一個checkbutton標籤
- 6. tkinter LabelFrame not attatching widgets
- 7. 哪個checkbutton已被檢查
- 8. Python 3.2 tkinter通過for循環添加讀取checkbutton值
- 9. 同時使用一個checkbutton和一個按鈕
- 10. 在一個Recylerview中添加兩個FirebaseListAdapter?
- 11. gtk + checkbutton設置
- 12. GTK:修改CheckButton
- 13. Python:如果選中checkbutton
- 14. Tkinter Checkbutton卡住未選中
- 15. 在tkinter中使用tkk的checkbutton顏色?
- 16. 如何在python中設置checkbutton「true」
- 17. 添加一個新行中一個UITableView
- 18. 中添加和一個UIViewController
- 19. 只允許用戶一次選擇一個checkButton?
- 20. 在Netbeans添加一個班。
- 21. 添加在一個ViewGroup
- 22. 在python中添加一個mimetype
- 23. 在web.xml中添加一個servlet
- 24. 在ToolStrip中添加一個TrackBar
- 25. 在列表中添加一個列表
- 26. 在iPhone中添加一個UILabel
- 27. 在SSRS中添加一個滾動框
- 28. 瞭解添加一個ChangeListener在TableView中
- 29. 在列表中添加一個清單
- 30. Prolems在addTextChangedListener中添加一個textView
我以「-labelwidget解決它」。 – Jimmy
這是正確的方法。請把它寫成答案;它將在未來幫助其他人。 –