Skip to content

[R-gui] Process control in gWidgets

4 messages · j verzani, Hana Sevcikova, Wayne.W.Jones at shell.com

#
Hello,

I implemented a GUI (using gWidgets) from which I'd like to start a long 
process by clicking a button. This process prints out status messages 
which the user should be able to see in the R console during the 
computation. But at the moment clicking the button freezes the GUI until 
the process is finished and all output is printed at the end. Is there a 
way how to do this? The process can take several hours and during that 
time I need to make the GUI available for other tasks.

I found a similar post on R-help from last year where John Verzani 
posted the following test code:

reallySlowFunction = function(n=20) {
for(i in 1:n) {
cat("z")
Sys.sleep(1) }
cat("\n")
}
w <- gwindow("test")
g <- ggroup(cont=w, horizontal=FALSE)
b <- gbutton("click me", cont=g,handler = function(h,...)
reallySlowFunction())
r <- gradio(1:3, cont=g, handler = function(h,...) print(svalue(h
  $obj)))

I cannot figure out why my GUI freezes and this one not but
here again, the output of reallySlowFunction is printed at the very end 
after the process finishes. Would anybody know how to solve it?

Thanks,

Hana
#
Hana Sevcikova <hana <at> cs.washington.edu> writes:
Dear Hana,

This post was followed up with
https://stat.ethz.ch/pipermail/r-help/2008-February/154249.html where a
combination of gtkEventsPending() and  gtkMainIteration() is used to update the
GUI during a computation. This could work for you if a) you are using
gWidgetsRGtk2 through gWidgets and b) you can add this within your long
computation. If that doesn't work out, let me know. 

--John
#
Thank you very much, John. I am indeed using gWidgetsRGtk2 but I was 
hoping to make my GUI independent of the specific toolkit. But there is 
probably no easy solution. Even with the gtkEventsPending() and 
gtkMainIteration() I don't get the output into the R-console as the 
computation runs, rather at the very end.

Please let me know if you get other ideas how to solve it.

Thanks,

Hana
jverzani wrote:
#
Hi Hana, 

I use the rpanel package to generate GUIs for R. 
Here is an example of what you are trying to do with the rpanel package: 
(p.s. make sure buffered output is switched off in the Rgui). 

  
reallySlowFunction = function(panel,n=20) {
for(i in 1:n) {
cat("z")
Sys.sleep(0.5) 
cat("\n")
}

return(panel)
}


library(rpanel)
# Create an rpanel and add the button "Simulate" to it.
panel <- rp.control()
rp.button(panel, action = reallySlowFunction, title = "Simulate")

Regards, 

Wayne






-----Original Message-----
From: r-sig-gui-bounces at stat.math.ethz.ch
[mailto:r-sig-gui-bounces at stat.math.ethz.ch]On Behalf Of Hana Sevcikova
Sent: 11 August 2009 07:30
To: jverzani
Cc: r-sig-gui at stat.math.ethz.ch
Subject: Re: [R-gui] Process control in gWidgets


Thank you very much, John. I am indeed using gWidgetsRGtk2 but I was 
hoping to make my GUI independent of the specific toolkit. But there is 
probably no easy solution. Even with the gtkEventsPending() and 
gtkMainIteration() I don't get the output into the R-console as the 
computation runs, rather at the very end.

Please let me know if you get other ideas how to solve it.

Thanks,

Hana
jverzani wrote:
_______________________________________________
R-SIG-GUI mailing list
R-SIG-GUI at stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-gui