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

问题描述 投票:0回答:1

我希望能够通过按下按钮来增加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)每个序列将具有每个序列应运行的用户可选时间。

App

tcl tk
1个回答
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. 应用每行的重量

在这种情况下,网格将为标签占用的每一行保留空间。

问候,

© www.soinside.com 2019 - 2024. All rights reserved.