2017-03-23 4 views
0

Nehmetiによって2つの異なるテーブルリストが異なるフレームとバインディングで作成されました。Tcl Tkは2つの異なるテーブルリストの行を選択します

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] 

これらの2つのテーブルリストは、あとで内容で埋められます。 pfd(tali_mw)の列 "oid"の番号は、pfd(tali_klaff)の列 "oid"の番号に対応します。

今私は次のような方法を書いた

(tali_klaff)PFD(tali_mw)内の行を選択すると、対応する行がPFDに選択されます。

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)で活性化された、対応する行の選択された行を参照。残念ながら、focusコマンドはテーブルリストのバインドされたコマンドをブロックします。たとえば、pfd(tali_klaff)ではダブルクリックはできません。

次は、pfd(tali_mw)の行を選択し、pfd(tali_klaff)の対応する行の背景を変更しようとします。しかし、私はこの方法を避けたい。 2つのテーブルリストで2つの行を選択する可能性はありますか?私は両方のテーブルリストを維持しなければなりません、なぜなら彼らはまだ他の機能を持っているからです。助けてくれてありがとう。あなたがそうでなければ1つのリストに事を選択両方 tablelists(-exportselection 0)で選択のエクスポートをオフにする必要があります

答えて

1

は、あなたが他に事を選択し停止します。このオプションで参照される選択肢はPRIMARYです。これは、一度に1つのウィジェットでしか保持できません(より洗練されたモデルを表示するためにselectionコマンドを使って賢明なことをしない限り)。

正確に何をしているのかに応じて、<<Cut>><<Copy>>、おそらく<<Paste>>(仮想)イベントの独自のバインディングを追加する必要がある場合もあります。あるいは、あなたのアプリケーションでは、あまり気にしないかもしれません。それはそれをフィニアリングしています...

関連する問題