我想实现样例结果,如何添加一个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
这是正确的方法。请把它写成答案;它将在未来帮助其他人。 –