在过程中使用相同的标签并递增标签框架行

时间:2018-09-01 12:55:22

标签: tcl tk

我希望能够通过按下按钮来增加标签框中的行。

我尝试了下面的代码,但似乎不起作用。我认为可能是因为我使用了相同的标签。我尝试将相同的变量手动添加到第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)每个序列都有一个用户可选择的时间来运行每个序列。

App

1 个答案:

答案 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
    }
}

秘密是

  1. 传播为零

  2. 为每行应用重量

通过这种方式,网格将为标签要占用的每一行保留空间。

Saludos,