两个不同表列表中的 Tcl Tk select 行
Tcl Tk select rows in two different tablelists
我通过 Nehmeti 在不同的框架和一些绑定中创建了两个不同的表格列表。
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) 中 select 一行,并在 pfd(tali_klaff)
中编辑相应的行 select
我写了下面的方法
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)中的select离子被拿走了
所以我尝试了以下方法:
$pfd(tali_mw) selection set $rowMW $rowMW
$pfd(tali_klaff) activate $rowKLAFF
focus $pfd(tali_klaff)
return
}
现在我看到 pfd(tali_mw) 中的 selected 行和 pfd(tali_klaff) 中激活的相应行。不幸的是,焦点命令阻止了表列表的绑定命令,例如我无法在 pfd(tali_klaff).
中进行任何双击
接下来我将尝试 select pfd(tali_mw) 中的行,并仅更改 pfd(tali_klaff) 中相应行的背景。但我想避免这种方式。有没有可能 select 两个表列表中的两行?我必须同时维护这两个表列表,因为它们还有其他功能。感谢您的帮助。
您应该关闭 两个 表列表 (-exportselection 0
) 中的选择导出,否则选择一个列表中的内容将阻止您选择另一个列表中的内容。该选项引用的选择是 PRIMARY
选择,并且一次只能由一个小部件保存(除非您使用 selection
命令进行巧妙的操作以呈现更复杂的模型)。
您可能还需要为 <<Cut>>
、<<Copy>>
和可能的 <<Paste>>
(虚拟)事件添加您自己的绑定,具体取决于您在做什么。或者您可能在您的应用程序中不太关心它们。这就是技巧……
我通过 Nehmeti 在不同的框架和一些绑定中创建了两个不同的表格列表。
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) 中 select 一行,并在 pfd(tali_klaff)
中编辑相应的行 select我写了下面的方法
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)中的select离子被拿走了
所以我尝试了以下方法:
$pfd(tali_mw) selection set $rowMW $rowMW
$pfd(tali_klaff) activate $rowKLAFF
focus $pfd(tali_klaff)
return
}
现在我看到 pfd(tali_mw) 中的 selected 行和 pfd(tali_klaff) 中激活的相应行。不幸的是,焦点命令阻止了表列表的绑定命令,例如我无法在 pfd(tali_klaff).
中进行任何双击接下来我将尝试 select pfd(tali_mw) 中的行,并仅更改 pfd(tali_klaff) 中相应行的背景。但我想避免这种方式。有没有可能 select 两个表列表中的两行?我必须同时维护这两个表列表,因为它们还有其他功能。感谢您的帮助。
您应该关闭 两个 表列表 (-exportselection 0
) 中的选择导出,否则选择一个列表中的内容将阻止您选择另一个列表中的内容。该选项引用的选择是 PRIMARY
选择,并且一次只能由一个小部件保存(除非您使用 selection
命令进行巧妙的操作以呈现更复杂的模型)。
您可能还需要为 <<Cut>>
、<<Copy>>
和可能的 <<Paste>>
(虚拟)事件添加您自己的绑定,具体取决于您在做什么。或者您可能在您的应用程序中不太关心它们。这就是技巧……