tcl tk 将 <Control-v> 绑定到表格列表中的单元格
tcl tk bind <Control-v> to a cell in a tablelist
我使用以下代码创建了一个表列表(由 Nehmeti 设计):
set _bvnr(tbl1) [tablelist::tablelist $_bvnr(fr2).tbl1 \
-columns {0 "OID vmbust" \
0 "OID vmflst" \
0 "Flurstück" \
0 "Buchungsblatt" \
0 "Buchungsart" \
0 "Laufende Nummer"} \
-background white\
-labelborderwidth 1\
-selectborderwidth 0\
-selectmode single \
-exportselection 0\
-labelfont $tabuefont\
-font $tabinfont\
-selectforeground $vmVConfig::setVar(activeFG)\
-selectbackground $vmVConfig::setVar(activeBG)\
-stretch all\
-height 8\
-setfocus 0\
-forceeditendcommand 1 \
-editstartcommand [itcl::code $this editStartTbl1] \
-editendcommand [itcl::code $this editEndTbl1] \
-xscrollcommand [list vmTkTools::configSB "h" $_bvnr(fr2).scrbx1]\
-yscrollcommand [list vmTkTools::configSB "v" $_bvnr(fr2).scrby1]\
-showarrow 0]
我让第 5 列可以由
编辑
$_bvnr(tbl1) columnconfigure 5 -editable no -name bgb -editwindow entryfield
editstart命令的方法如下:
itcl::body vmBVNummer::editStartTbl1 {tbl row col txt} {
set _bvnr(tblCPath1) [$tbl editwinpath]
# Entryfield erstellen
$_bvnr(tblCPath1) configure -highlightthickness 2 \
-borderwidth 0 \
-selectbackground $vmVConfig::setVar(activeBG) \
-selectforeground $vmVConfig::setVar(activeFG) \
-state normal \
-textfont $entfont \
-validate "[list vmTclTools::valInteger2 %P] " \
-textbackground white
set _bvnr(editLnr) $txt
bind [$tbl entrypath] <Control-v> [itcl::code $this pasteGrber]
return $txt
}
通过绑定方法 "pasteGrber" 我试图防止 "selection get" 中的文本可以粘贴到输入字段中,如果它不是整数(在 vmTclTools::valInteger 中检查)
itcl::body vmBVNummer::pasteGrber {} {
set tbl [getTbl1Path]
set cursorPos [[$tbl entrypath] index insert]
if {[catch {selection get} txt]} {
#puts "FEHLER: >>$txt<<"
}
if {[vmTclTools::valInteger2 $txt] == 1} {
$_bvnr(tblCPath1) insert $cursorPos $txt
clipboard clear
selection clear
return 1
} else {
bell
return 0
}
}
getTbl1Path 方法只是给出了表列表的路径。
valInteger returns 只有 0 或 1.
每当我将一些文本粘贴到已编辑的单元格时,都会执行 pasteGrber 方法,但无论如何都会粘贴复制的文本。我怎样才能避免这种情况?
要停止触发正常绑定,您需要让 main 绑定脚本执行 break
。这意味着您应该让 pasteGrber
方法在它想要抑制可能触发的其他绑定时执行此操作:
return -code break
这使得 调用上下文 执行 break
(因为 break
确实生成了一种特殊类型的异常)。
我使用以下代码创建了一个表列表(由 Nehmeti 设计):
set _bvnr(tbl1) [tablelist::tablelist $_bvnr(fr2).tbl1 \
-columns {0 "OID vmbust" \
0 "OID vmflst" \
0 "Flurstück" \
0 "Buchungsblatt" \
0 "Buchungsart" \
0 "Laufende Nummer"} \
-background white\
-labelborderwidth 1\
-selectborderwidth 0\
-selectmode single \
-exportselection 0\
-labelfont $tabuefont\
-font $tabinfont\
-selectforeground $vmVConfig::setVar(activeFG)\
-selectbackground $vmVConfig::setVar(activeBG)\
-stretch all\
-height 8\
-setfocus 0\
-forceeditendcommand 1 \
-editstartcommand [itcl::code $this editStartTbl1] \
-editendcommand [itcl::code $this editEndTbl1] \
-xscrollcommand [list vmTkTools::configSB "h" $_bvnr(fr2).scrbx1]\
-yscrollcommand [list vmTkTools::configSB "v" $_bvnr(fr2).scrby1]\
-showarrow 0]
我让第 5 列可以由
编辑$_bvnr(tbl1) columnconfigure 5 -editable no -name bgb -editwindow entryfield
editstart命令的方法如下:
itcl::body vmBVNummer::editStartTbl1 {tbl row col txt} {
set _bvnr(tblCPath1) [$tbl editwinpath]
# Entryfield erstellen
$_bvnr(tblCPath1) configure -highlightthickness 2 \
-borderwidth 0 \
-selectbackground $vmVConfig::setVar(activeBG) \
-selectforeground $vmVConfig::setVar(activeFG) \
-state normal \
-textfont $entfont \
-validate "[list vmTclTools::valInteger2 %P] " \
-textbackground white
set _bvnr(editLnr) $txt
bind [$tbl entrypath] <Control-v> [itcl::code $this pasteGrber]
return $txt
}
通过绑定方法 "pasteGrber" 我试图防止 "selection get" 中的文本可以粘贴到输入字段中,如果它不是整数(在 vmTclTools::valInteger 中检查)
itcl::body vmBVNummer::pasteGrber {} {
set tbl [getTbl1Path]
set cursorPos [[$tbl entrypath] index insert]
if {[catch {selection get} txt]} {
#puts "FEHLER: >>$txt<<"
}
if {[vmTclTools::valInteger2 $txt] == 1} {
$_bvnr(tblCPath1) insert $cursorPos $txt
clipboard clear
selection clear
return 1
} else {
bell
return 0
}
}
getTbl1Path 方法只是给出了表列表的路径。 valInteger returns 只有 0 或 1.
每当我将一些文本粘贴到已编辑的单元格时,都会执行 pasteGrber 方法,但无论如何都会粘贴复制的文本。我怎样才能避免这种情况?
要停止触发正常绑定,您需要让 main 绑定脚本执行 break
。这意味着您应该让 pasteGrber
方法在它想要抑制可能触发的其他绑定时执行此操作:
return -code break
这使得 调用上下文 执行 break
(因为 break
确实生成了一种特殊类型的异常)。