我有测试代码:
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 curselection = 0”好。
但是在调用目录对话框时,表列表的选择消失了。树视图选择仍然存在,应保留。
我找不到如何使表列表不被选中的方法。
表格列表v6.8TIA
这种奇怪的行为是当几个小部件争夺PRIMARY
selection时发生的事情,这是X11的功能,用于表示一次只选择一个小部件。 (它过去也经常用于选择和粘贴样式的文本操作,但这已不受欢迎,并且更跨平台的PRIMARY
样式选择用于此类操作。)我不知道为什么在您的特定情况下而不是在其他情况下将其打开,但这可能与Debian的X属性中的默认设置有关;那不是很明显,但是可以用此CLIPBOARD
列出。
shell command
Tk小部件默认情况下支持xrdb -query -all
选择(在X11上;在其他平台上这实际上没有意义),许多第三方和合成小部件也支持,但是可以通过设置标准布尔值[C0小部件上的]选项设置为任何假值。完成后,小部件将继续保留所选内容的概念,但不会将该概念导出到自身之外(除非您执行Ctrl + C或类似的操作)。
PRIMARY