ISO a way to select programmatically an entry from a popup

Liste des GroupesRevenir à cl tcl 
Sujet : ISO a way to select programmatically an entry from a popup
De : hgiese (at) *nospam* ratiosoft.com (Helmut Giese)
Groupes : comp.lang.tcl
Date : 13. Sep 2024, 00:31:34
Autres entêtes
Organisation : ratiosoft
Message-ID : <l4t6ejp2n55d7dpkt497ntummfi1m7ns9h@4ax.com>
User-Agent : Forte Free Agent 1.93/32.576 English (American)
Hello out there,
it seems like as long as a popup is posted the app cannot do anything
- in particular it cannot post any events. Consider this script:
---
package require Tk
foreach ch [winfo children "."] {destroy $ch}

# Turn $x & $y into absolute coords
proc mkAbsCoords {c x y} {
    # get the canvas's coord relative to the toplevel
    set xOfs [expr {[winfo rootx $c]}]
    set yOfs [expr {[winfo rooty $c]}]
    return [list [expr {$x + $xOfs}] [expr {$y + $yOfs}]]
}

proc popupMenu {c x y} {
    catch {destroy .popup}
    set popup [menu .popup -tearoff false]
    set inactiveBG #b2b2b2
    $popup add command -label "Choose an op" \
        -background  #b2b2b2 -activebackground  #b2b2b2 \
        -activeforeground [$popup cget -fg]
    $popup add command -label "Op 1" -command {puts "Op1 selected"}
    $popup add command -label "Op 2" -command {puts "Op2 selected"}
    lassign [mkAbsCoords $c $x $y] x y
    tk_popup $popup $x $y
}

set num [lindex $argv 0]
set c [canvas .c -width 200 -height 200]
pack $c
set id [$c create rectangle 50 50 150 150 -fill lightyellow]
$c bind $id <Button-3> [list popupMenu $c %x %y]
update
if {$num} {
    set event Button
} else {
    set event ButtonPress
}
event generate $c <$event> -button 3 -x 100 -y 100 -warp 1
puts "Back from '$event'"
if {$num == 0} {
    event generate $c <ButtonRelease> -button 3 -x 100 -y 100 -warp 1
    puts "Back from 'ButtonRelease'"
}
---
and this output:
---
Microsoft Windows [Version 10.0.19045.4894]
(c) Microsoft Corporation. Alle Rechte vorbehalten.

d:\proj\_ToolsSE\Skeleton\TclTests>tclsh tst.tcl 1
Back from 'Button'
Op1 selected

d:\proj\_ToolsSE\Skeleton\TclTests>tclsh tst.tcl 0
Back from 'ButtonPress'
Back from 'ButtonRelease'
Op1 selected
---
To me this seems to clearly indicate that the selection cannot be
influenced by the controlling app: control only returns when the
selection has happened - which is too bad.

Or is there a trick by which one can influence the selection from a
popup?
Any idea will be highly appreciated.
Helmut
Oh, this is on Windows 64 bit under Tcl 8.6.10

Date Sujet#  Auteur
13 Sep 24 * ISO a way to select programmatically an entry from a popup7Helmut Giese
14 Sep 24 +* Re: ISO a way to select programmatically an entry from a popup3greg
14 Sep 24 i+- Re: ISO a way to select programmatically an entry from a popup1greg
14 Sep 24 i`- Re: ISO a way to select programmatically an entry from a popup1greg
15 Sep 24 `* Re: ISO a way to select programmatically an entry from a popup3greg
15 Sep 24  `* Re: ISO a way to select programmatically an entry from a popup2greg
16 Sep 24   `- Re: ISO a way to select programmatically an entry from a popup1Helmut Giese

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal