我希望能够通过按下按钮来增加labelframe中的行。
我尝试了下面的代码,但似乎没有用。我想这可能是因为我使用相同的标签。我尝试手动将相同的变量放在第0行和第1行,它只显示在第0行,所以不确定是什么时候发生的。
增加$ add_row是在将标签放入行之前和之后使用puts。
global newrow
set newrow 1
tk::labelframe .ss -text "Sequence Select" -pady 10
tk::label .ss.seq_no_lb -text "Seq #" -justify center -width 5
tk::button .enter -borderwidth 1 -height 1 -text "Enter" -width 5 -command incrow
pack .enter
proc incrow {} {
global newrow
place .ss -x 0 -y 0
puts "row before new grid is $newrow"
grid .ss.seq_no_lb -row $newrow
incr newrow
puts "row after new grid is $newrow"
}
有任何想法吗?
编辑 - 如果我解释我想做什么,可能会更好。
附件图像是应用程序到目前为止的样子。
我们的想法是打开一系列由复选框选择的继电器。 (1)你选择第一个序列,按回车键,然后x转到1或0(2)添加另一个序列,按add将创建另一个名为Seq 2的行并显示x'(3)然后启动序列(4)每个序列将具有每个序列应运行的用户可选时间。
好的,有更简单的选择,但它可以做到。例如,
set Rows 10
set newrow 0
grid [labelframe .ss -text "Seq #" -pady 10 -height 200 -width 50 -bg green]
for {set i 0 } { $i < $Rows } {incr i} {
grid rowconfigure .ss $i -weight 1 -uniform 1
}
grid propagate .ss 0
label .ss.seq_no_lb -bg red
grid [button .enter -borderwidth 1 -height 1 -text "Enter" -width 5 -command incrow]
proc incrow {} {
global newrow Rows
.ss.seq_no_lb configure -text "Seq $newrow"
grid .ss.seq_no_lb -row $newrow
incr newrow
if {$newrow == $Rows} {
.enter configure -state disabled
}
}
秘密是
在这种情况下,网格将为标签占用的每一行保留空间。
问候,