如何将菜单值传递给子菜单

How to pass menu value to submenu

menubutton .mb -text Example -menu .mb.menu
pack .mb -padx 10 -pady 10

set m [menu .mb.menu -tearoff 1]
$m add cascade -label A -menu $m.sub1
$m add cascade -label B -menu $m.sub1
$m add cascade -label C -menu $m.sub1

set m2 [menu $m.sub1 -tearoff 0] 
$m2 add radio -label x -variable fruit -value apple
$m2 add radio -label y -variable fruit -value orange
$m2 add radio -label z -variable fruit -value kiwi 

假设有人点击 B 然后点击 z,我想打印 Bz。 假设有人点击 A 然后点击 y,我想打印 Ay。

怎么做? 即它应该将菜单值传递给子菜单值

当您像这样在多个级联条目中使用单个菜单时,您无法区分它们。为了区分它们,您应该创建三次子菜单并通过(如下所示)绑定回调或给每个回调一个自己的 -postcommand.

menubutton .mb -text Example -menu .mb.menu
pack .mb -padx 10 -pady 10

set m [menu .mb.menu -tearoff 1]
foreach cmd {sub1 sub2 sub3} tag {A B C} {
    set m2 [menu $m.$cmd -tearoff 0]
    foreach label {x y z} value {apple orange kiwi} {
        $m2 add radio -label $label -variable fruit -value $value \
                -command [list puts $tag$label]
    }

    # I prefer to add the cascades after making the submenu
    $m add cascade -label $tag -menu $m2
}