Tcl tablelist用于调用目录对话框

Tcl tablelist用于调用目录对话框,tcl,tk,Tcl,Tk,我有测试代码: package require Tk package require tablelist set ::tv {{N1 qwe} {N3 rty} {N4 uio}} set ::dir [pwd] tablelist::tablelist .tbl -columns {0 Name 0 Value} -listvariable ::tv button .but -text "Directory..." -command { set sel1 [.tbl curselec

我有测试代码:

package require Tk
package require tablelist

set ::tv {{N1 qwe} {N3 rty} {N4 uio}}
set ::dir [pwd]
tablelist::tablelist .tbl -columns {0 Name 0 Value} -listvariable ::tv
button .but -text "Directory..." -command {
    set sel1 [.tbl curselection]
    set sel2 [.tree selection]
    tk_messageBox -message ".tbl curselection = \"$sel1\"\n\n.tree curselection = \"$sel2\""
    set ::dir [tk_chooseDirectory -initialdir "$::dir"]
}
ttk::treeview .tree -columns Value
.tree heading "#0" -text "Name"
.tree heading "#1" -text "Value"
foreach t $::tv {
    lassign $t t1 t2
    .tree insert {} end -text $t1 -values $t2
}
.tbl selection set 0; #.tbl activate 0
.tree selection set I001
pack .tbl .tree .but -side left -anchor n -padx 9 -pady 9
首先按下“目录”按钮,我看到“tablelist=0”OK

但在调用目录对话框时,tablelist将消失。treeview选择仍然保留,它应该保留

我找不到如何使桌面列表保持不变

表格列表v6.8 短暂性脑缺血发作


这种奇怪的行为是当多个小部件在争用时发生的,这是X11的一项功能,用于表示一次只能选择一个小部件。(它也曾被大量用于选择和粘贴样式文本操作,但这已经不受欢迎了,更跨平台的
剪贴板
样式选择也被用于这类操作。)我不知道为什么它会在您的特定情况下启用,而不是在其他情况下启用,但这可能与Debian上X属性的默认值有关;这不是很明显,但可以与此一起列出

Tk小部件默认支持
PRIMARY
select(在X11上;在其他平台上没有真正意义),许多第三方和合成小部件也支持,但可以通过将小部件上的标准布尔
-exportselection
选项设置为任何假值来告知它们不要这样做。完成后,小部件将继续维护它所选内容的概念,但不会将该概念导出到自身之外(除非您执行Ctrl+C或类似操作)


这种奇怪的行为是当多个小部件在争一个小部件时发生的,X11的一个特性用于表示一次只有一个小部件选择了任何东西。(它也曾被大量用于选择和粘贴样式文本操作,但这已经不受欢迎了,更跨平台的
剪贴板
样式选择也被用于这类操作。)我不知道为什么它会在您的特定情况下启用,而不是在其他情况下启用,但这可能与Debian上X属性的默认值有关;这不是很明显,但可以与此一起列出

Tk小部件默认支持
PRIMARY
select(在X11上;在其他平台上没有真正意义),许多第三方和合成小部件也支持,但可以通过将小部件上的标准布尔
-exportselection
选项设置为任何假值来告知它们不要这样做。完成后,小部件将继续维护它所选内容的概念,但不会将该概念导出到自身之外(除非您执行Ctrl+C或类似操作)


无法复制,我使用的是tablelist 5.13,而Tcl 8.6.7我已经将tablelist更新为6.8,但仍然无法复制。我在Windows 10、ActiveTcl 8.6.8上尝试过它-没有问题,一切正常。但是在Debians 9.9(Tcl/Tk 8.6.6)、10.0(Tcl/Tk 8.6.9)、bullseye/sid(Tcl/Tk 8.6.10)上,问题仍然存在。听起来在选择处理方面有些微妙,可能是由Debian上使用特定X桌面配置的一些奇怪的XDEFAULT触发的。尝试通过tablelist禁用导出(主)选择。无法复制,我在tablelist 5.13上,但是Tcl 8.6.7我已经将tablelist更新为6.8,但仍然无法复制。我在Windows 10、ActiveTcl 8.6.8上尝试过它-没有问题,所有都可以正常工作。但是在Debians 9.9(Tcl/Tk 8.6.6)、10.0(Tcl/Tk 8.6.9)、bullseye/sid(Tcl/Tk 8.6.10)上问题仍然存在。听起来在选择处理方面有些微妙,可能是由Debian上使用特定X桌面配置的一些奇怪的Xdefaults触发的。尝试通过tablelist禁用(主)选择的导出。
xrdb -query -all
tablelist::tablelist .tbl -columns {0 Name 0 Value} -listvariable ::tv \
        -exportselection false