[R] tcl/tk bind destroy event
Peter Dalgaard
p.dalgaard at biostat.ku.dk
Thu Aug 3 14:13:10 CEST 2006
Jean Coursol <coursol at mathens.u-psud.fr> writes:
> Perhaps Destroy key is unknown by Tcl; it is not in the
> Event modifiers table in Welch Book...
> But try with <Control-L> or <Shift-Control_L>, it runs
> (but not with <Control_L-Shift> ??).
I don't think that is it. As I read it, Tk catches the Destroy event
alright, but the problem is that it is too late: the window
destruction is already in motion at the time and there's no way to
"undestroy" it from within binding. I think you need to create a "wm
protocol" handler for WM_DELETE_WINDOW. As in
x <- tktoplevel()
tcl("wm", "protocol", x, "WM_DELETE_WINDOW", quote(cat("I'm staying!\n")))
--- now try to destroy the window using window controls ---
tcl("wm", "protocol", x, "WM_DELETE_WINDOW", "")
--- things should be back to normal now ---
> Use xmodmap to see the current mappings from keys to modifiers.
>
> Jean Coursol
>
> On Wed, 2 Aug 2006, Franco Mendolia wrote:
>
> > Hello!
> >
> > I want to create a messagebox whenever the user wants to destroy the window
> > (e.g. <Alt-F4> or the 'x' in the right top corner) and ask if a modified file
> > should be saved or not.
> >
> > If 'cancel' is chosen then nothing should happen and the windows still should be
> > existing. This doesn't work. When I press cancel the window will be destroyed
> > although.
> >
> > I also implemented a menu item 'Quit' where I show the same messagebox and there
> > it works fine.
> >
> > How can I make it work or is there another method to do this? I'm very new to R
> > and tcl/tk.
> >
> > Here is part of my code:
> >
> >
> > exitProg <- function()
> > {
> > returnVal <- tkmessageBox(title="Question",
> > message="Save modified file?",
> > icon="question", type="yesnocancel", default="yes")
> >
> > returnVal <- as.character(returnVal)
> >
> > if( returnVal == "yes" )
> > {
> > # save file
> > value <- saveFile()
> > # destroy window when save was successfull
> > if( value == 1 )
> > tkdestroy(mw)
> > }
> > if( returnVal == "no" )
> > {
> > tkdestroy(mw)
> > }
> > if( returnVal == "cancel" )
> > {
> > # do nothing
> > cat("Cancel was pressed.\n")
> > }
> > }
> >
> > # bind the destroy event in order to show a message box
> > tkbind(mw,"<Destroy>",exitProg)
> >
> > # menu item which works fine
> > tkadd(fileMenu, "command", label="Quit", command=exitProg)
> >
> >
> >
> > Thank you.
> >
> > Franco Mendolia
> >
> > ______________________________________________
> > R-help at stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
O__ ---- Peter Dalgaard Øster Farimagsgade 5, Entr.B
c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list