Как заставить кнопки Tcl/Tk вести себя как радиокнопки?

Согласно документации ActiveTcl 8.5:
виджеты ttk::radiobutton используются в группах для отображения или изменения набора взаимоисключающих параметров. Радиокнопки связаны с переменной Tcl и имеют связанное значение; при нажатии радиокнопки переменной присваивается соответствующее значение.
И более общее определение:
радиокнопки используются для взаимоисключающих настроек. Щелчок по одному вызывает появление любого другого, который был нажат, как на старом автомобильном радио.

Я действительно предпочитаю использовать внешний вид кнопок вместо переключателей. Как добиться такого же поведения радиокнопок в группе кнопок?
Я нашел на http://wiki.tcl.tk/17899 о кнопках-переключателях, но они больше похожи на кнопки-флажки.

Любые идеи действительно приветствуются. Спасибо


person milarepa    schedule 22.01.2013    source источник
comment
Я блуждаю, могу ли я использовать метку вместо кнопки, чтобы действовать как радиокнопка.   -  person milarepa    schedule 22.01.2013


Ответы (2)


Вы можете установить кнопку relief, чтобы она оставалась утопленной.

set colours {red blue green}
foreach c $colours {
    pack [button .$c -text $c -command [list pushed $c]]
}

proc pushed colour {
    puts $colour
    set label [.$colour cget -text]
    foreach c $::colours {
        .$c configure -relief [expr {$c eq $label ? "sunken" : "raised"}]
    }
}
person glenn jackman    schedule 22.01.2013
comment
Спасибо, отлично работает. Мне удалось изменить ваш скрипт для использования с метками, добавив следующую строку: bind .$c ‹ButtonPress-1› push $c - person milarepa; 22.01.2013

Установите для атрибута радиокнопок -indicatoron значение false.

person Bryan Oakley    schedule 22.01.2013