Tk Source Code

View Ticket
Login
2019-09-02
18:21 Closed ticket [c92cee4740]: Deselect radiobutton plus 7 other changes artifact: f3445389c1 user: fvogel
2018-09-16
16:52 Ticket [c92cee4740]: 3 changes artifact: 2a2e45771d user: bll
15:37 Ticket [c92cee4740]: 3 changes artifact: 3b784a67b1 user: bll
15:30 Ticket [c92cee4740]: 3 changes artifact: 3e2d5a8f7c user: fvogel
15:09 Ticket [c92cee4740]: 3 changes artifact: 6ed4b67b13 user: bll
15:02 Ticket [c92cee4740]: 3 changes artifact: ae66116bb6 user: fvogel
13:48 Ticket [f9116b31ac] Deselect radiobutton status still Closed with 4 other changes artifact: b4bc0c349e user: fvogel
2018-09-15
18:05 Ticket [c92cee4740] Deselect radiobutton status still Open with 3 other changes artifact: 94aa6490b0 user: bll
15:39 New ticket [c92cee4740]. artifact: b49a8c3d61 user: anonymous

Ticket UUID: c92cee4740d33ccfd3f45e06cebab0bd83a9ad45
Title: Deselect radiobutton
Type: Bug Version: 8.6
Submitter: anonymous Created on: 2018-09-15 15:39:45
Subsystem: 03. [*button] and [label] Assigned To: fvogel
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2019-09-02 18:21:09
Resolution: Invalid Closed By: fvogel
    Closed on: 2019-09-02 18:21:09
Description:
frame .t
pack .t
set reptype 0
radiobutton .t.r1 -text "1" -variable reptyp -value 1
radiobutton .t.r2 -text "2" -variable reptyp -value 2
radiobutton .t.r3 -text "3" -variable reptyp -value 3
radiobutton .t.r4 -text "4" -variable reptyp -value 4
radiobutton .t.r5 -text "5" -variable reptyp -value 5
radiobutton .t.r6 -text "6" -variable reptyp -value 6

bind .t.r1 <Double-1> {Chk_Alone $reptyp}
bind .t.r2 <Double-1> {Chk_Alone $reptyp}
bind .t.r3 <Double-1> {Chk_Alone $reptyp}
bind .t.r4 <Double-1> {Chk_Alone $reptyp}
bind .t.r5 <Double-1> {Chk_Alone $reptyp}
bind .t.r6 <Double-1> {Chk_Alone $reptyp}


grid .t.r1
grid .t.r2 
grid .t.r3
grid .t.r4
grid .t.r5
grid .t.r6

proc Chk_Alone {args} {
global reptyp

#tk_messageBox -message "unselected"
after idle [list .t.r$args deselect ]
}

#is a short exemple deselect not work, work only if tk_message is not a comment
User Comments: fvogel added on 2019-09-02 18:21:09:

I don't think there is a bug here. The radiobutton is set upon <ButtonRelease> event, and this fires before or after the idle command depending on the presence of the tk_messageBox that precedes it.

1. With:

proc Chk_Alone {args} {
  global reptyp
  puts IN
  after idle [list .t.r$args deselect ; puts DONE]
  puts OUT
}

Sequence of events: <Button-1> <ButtonRelease> <Double-1> IN DONE OUT <ButtonRelease>

  • The double click on button-1 fires the binding running the Chk_Alone proc, and this proc simply schedules a deselect command (that sets 'reptype' to the empty string, thus selecting all radiobuttons with -variable reptype). This command executes at next idle time.
  • <ButtonRelease> fires at the very end, which sets the clicked radiobutton

2. With:

proc Chk_Alone {args} {
  global reptyp
  puts IN
  tk_messageBox -message "unselected"
  after idle [list .t.r$args deselect ; puts DONE]
  puts OUT
}

Sequence of events: <Button-1> <ButtonRelease> <Double-1> IN <ButtonRelease> DONE OUT

  • The difference here is that the tk_messageBox enters the event loop (through vwait), which services the <ButtonRelease> event that was queued. This event is therefore no longer queued and the deselect command is the last thing to execute, contrary to the previous case.

To achieve what you seem to want, you can remove the tk_messageBox and use 'after 0' instead of 'after idle'.


bll added on 2018-09-16 16:52:37:
See also: http://core.tcl.tk/tcl/info/7f08437314ca213f

bll added on 2018-09-16 15:37:05:
Well, crap.  I automatically look at ttk::radiobutton.
Force of habit.  Sorry.

fvogel added on 2018-09-16 15:30:02:
http://www.tcl.tk/man/tcl8.6/TkCmd/radiobutton.htm#M23

bll added on 2018-09-16 15:09:40:
Oh, really?
Which manual page are you finding that in?
What version?

I see no deselect.

fvogel added on 2018-09-16 15:02:56:
deselect definitely is a documented and supported command for radiobuttons.

That said I have no idea about what the OP strives to achieve. It is far from obvious there is a bug here. Best would have been to post this question on comp.lang.tcl first.

bll added on 2018-09-15 18:05:18:
deselect is not a supported command.
Just set reptype to 0.