我希望能够通过按下按钮来增加标签框中的行。
我尝试了下面的代码,但似乎不起作用。我认为可能是因为我使用了相同的标签。我尝试将相同的变量手动添加到第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)选择第一个序列,按Enter键,x转到1或0 (2)要添加另一个序列,请按添加,这将创建另一个名为Seq 2的行并显示x (3)然后开始序列 (4)每个序列都有一个用户可选择的时间来运行每个序列。
答案 0 :(得分:0)
好的,还有其他更简单的选择,但有可能做到。例如,
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
}
}
秘密是
传播为零
为每行应用重量
通过这种方式,网格将为标签要占用的每一行保留空间。
Saludos,