2017-03-23 69 views
0

我在Nehmeti中创建了两个不同的表格列表,分别是不同的框架和一些绑定。Tcl Tk在两个不同的表格列表中选择行

set pfd(panWin) [panedwindow $pfd(bottomFr).pw -showhandle 1 -orient vertical -sashpad 0 -sashrelief raised -sashwidth 2] 
set pfd(frMesswerte) [frame $pfd(panWin).frMesswerte] 
set pfd(frKlaffNeupkt) [frame $pfd(panWin).frKlaffNeupkt] 
set pfd(noteb) [iwidgets::notebook $pfd(frKlaffNeupkt).noteb] 
pack $pfd(noteb) -anchor nw -expand 1 -fill both 
set pfd(frKlaffungen) [$pfd(noteb) add -label Klaffungen] 

set pfd(tali_mw) [tablelist::tablelist $pfd(frMesswerte).li.tali_mw \ 
                -columns {0 "oid" l \ 
                  0 "status" l \ 
                  0 "art" l \ 
                  0 "sollTyp" l \ 
                  0 "Nr" l \ 
                  0 "Typ" l \ 
                  0 "Gst" l \ 
                  0 "Hz" r \ 
                  0 "V" r \ 
                  0 "S" r \ 
                  0 "Q" r \ 
                  0 "L" r \ 
                  0 "AK" l\ 
                  0 "LSEX" l \ 
                  0 "lfdNrGes" l}\ 
                -exportselection 1 \ 
                -labelbackground #EEEEEE \ 
                -background white \ 
                -labelfont $tableheadfont\ 
                -font $tableinhfont\ 
                -stretch 12\ 
                -selectbackground $vmVConfig::setVar(activeBG) \ 
                -selectforeground $vmVConfig::setVar(activeFG) \ 
                -selectmode single\ 
                -borderwidth 1 \ 
                -labelborderwidth 1 \ 
                -selectborderwidth 0 \ 
                -tooltipaddcommand [::itcl::code $this tooltipAddCmd] \ 
                -tooltipdelcommand [::itcl::code $this tooltipDelCmd] \ 
                -xscrollcommand [list vmTkTools::configSB "h" $pfd(mw_scrx)]\ 
                -yscrollcommand [list vmTkTools::configSB "v" $pfd(mw_scry)]] 

set body [$pfd(tali_mw) bodypath]            
bind $body <Double-1> +[::itcl::code $this doubleKlickMesswerte %x %y %W] 
bind $body <Button-1> +[::itcl::code $this loeschePfeil] 
bind $body <Button-3> +[bind TablelistBody <Button-1>] 
bind $body <Button-3> +[::itcl::code $this popUp $pfd(popUpMenu) %X %Y] 

set pfd(tali_klaff) [tablelist::tablelist $pfd(frKlaffungen).li.tali_klaff \ 
               -columns {0 "oid" l 0 "Nr" l 0 "dX" r 0 "dY" r 0 "GwX" r 0 "GwY" r 0 "Rdz" r}\ 
               -labelbackground #EEEEEE \ 
               -background white \ 
               -labelfont $tableheadfont\ 
               -font $tableinhfont\ 
               -stretch 7\ 
               -selectbackground $vmVConfig::setVar(activeBG) \ 
               -selectforeground $vmVConfig::setVar(activeFG) \ 
               -selectmode single\ 
               -labelrelief groove \ 
               -borderwidth 1 \ 
               -labelborderwidth 1 \ 
               -selectborderwidth 0 \ 
               -xscrollcommand [list vmTkTools::configSB "h" $pfd(klaff_scrx)]\ 
               -yscrollcommand [list vmTkTools::configSB "v" $pfd(klaff_scry)]] 

set body [$pfd(tali_klaff) bodypath]            
bind $body <Double-1> +[::itcl::code $this anzeigePpMp4Klaff] 
bind $body <Button-3> +[bind TablelistBody <Button-1>] 
bind $body <Button-3> +[::itcl::code $this popUp $pfd(popUpKlaffungen) %X %Y] 

这两个表格列表后面填满了内容。 pfd(tali_mw)中的“oid”列中的数字对应于pfd(tali_klaff)中的“oid”列中的数字。

现在我想选择在PFD的行(tali_mw)和PFD(tali_klaff)被选择相应的行

我写了下面的方法。

itcl::body vmMaskHelmert::selPPorMPinTableMWKLAFF {oidbez id} { 
    foreach tag [$data(canRef) gettags $id] { 
     if {[string range $tag 0 7] == "PASSPKT_"} { 
     set art "pass" 
     } elseif {[string range $tag 0 7] == "MASSPKT_"} { 
     set art "masse" 
     } 
    } 

    set inhaltMW [$pfd(tali_mw) get 0 end] 
    set idx 0 
    $pfd(tali_mw) selection clear 0 end 
    foreach zeile $inhaltMW { 
     set ken [lindex $zeile 0] 
     if { [string compare $ken $oidbez] == 0 } { 
     set rowMW $idx 
     break 
     } 
     incr idx 
    } 

    set inhaltKLAFF [$pfd(tali_klaff) get 0 end] 
    set idx 0 ; # Zaehler welche Zeile 
    $pfd(tali_klaff) selection clear 0 end 
    foreach zeile $inhaltKLAFF { 
     set ken [lindex $zeile 0] 
     if { [string compare $ken $oidbez] == 0 } { 
     set rowKLAFF $idx 
     break 
     } 
     incr idx 
    } 
    . 
    . 
    . 

参数“oidbez”是两个表中的第0列的oid。

首先,我想继续这样的:

$pfd(tali_mw) selection set $rowMW $rowMW 
    $pfd(tali_klaff) selection set $rowKLAFF $rowKLAFF 

    return 
} 

但在PFD(tali_mw)选择被带走。

所以我试过如下:

$pfd(tali_mw) selection set $rowMW $rowMW 
    $pfd(tali_klaff) activate $rowKLAFF 
    focus $pfd(tali_klaff) 
    return 
} 

现在我看到在PFD(tali_mw)选定的行和相应的行PFD(tali_klaff)激活。不幸的是,焦点命令会阻止列表中的绑定命令,例如我无法在pfd(tali_klaff)中进行任何双击。

接下来,我会尝试选择pfd(tali_mw)中的行,并只更改pfd(tali_klaff)中相应行的背景。但我想避免这种方式。有没有可能在两个列表中选择两行?我必须维护两个列表,因为它们还有其他功能。感谢您的帮助。

回答

1

您应该关闭在选择的出口都 tablelists(-exportselection 0),否则在一个列表中选择的事情会阻止你选择在其他的事情。该选项所指的选择是PRIMARY选择,并且一次只能由单个控件进行选择(除非您使用selection命令来提供更复杂的模型)。

您可能还需要为<<Cut>><<Copy>>和可能的<<Paste>>(虚拟)事件添加自己的绑定,具体取决于您正在执行的操作。或者你可能在你的应用程序中不太在乎它们。这就是它...