Выбор списка таблиц идет при вызове диалога каталога - PullRequest
1 голос
/ 14 апреля 2020

У меня есть тестовый код:

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» все в порядке.

Но при вызове диалога каталога, Список таблиц исчезает. Выбор древовидной структуры остается, как и должно быть.

Я не смог найти, как сделать так, чтобы выбор таблицы не изменялся.

tablelist v6.8 TIA

1 step 2 step 3 step

1 Ответ

0 голосов
/ 15 апреля 2020

Такое странное поведение возникает, когда несколько виджетов борются за PRIMARY выбор , особенность X11, которая используется для обозначения того, что только один виджет одновременно имеет что-нибудь выбрано. (Раньше он также часто использовался для манипулирования текстом в стиле «выбирай и вставляй», но он потерял популярность, и для такого рода вещей используются более кроссплатформенные выборки в стиле CLIPBOARD.) Понятия не имею почему он включается в вашем конкретном случае c, а не где-то еще, но это, вероятно, связано со значениями по умолчанию в свойствах X Debian; это не очень заметно, но может быть перечислено с помощью этой команды оболочки .

xrdb -query -all

Tk виджеты поддерживают выбор PRIMARY по умолчанию (на X11; на других платформах это не имеет особого смысла) и многие сторонние и синтетические c виджеты также работают, но им можно запретить, установив для стандартного логического параметра -exportselection в виджете любое ложное значение. Как только это будет сделано, виджет продолжит поддерживать понятие того, что он выбрал, но не будет экспортировать это понятие вне себя (если вы не выполните Ctrl + C или что-то подобное ).

tablelist::tablelist .tbl -columns {0 Name 0 Value} -listvariable ::tv \
        -exportselection false
...