代码之家  ›  专栏  ›  技术社区  ›  frankc

R:构建一个简单的命令行绘制工具/捕获窗口关闭事件

  •  8
  • frankc  · 技术社区  · 14 年前

    我试图在一个脚本中使用r,它将充当一个简单的命令行绘图工具。也就是说,用户在csv文件中输入管道,然后得到一个绘图。我可以通过各种临时文件机器找到一个很好的显示图,但是我遇到了一个障碍。在用户关闭窗口之前,我不知道如何让r继续运行。

    如果我策划并退出,情节立即消失。如果我绘制并使用某种无限循环,用户将无法关闭该绘图;他必须使用我不喜欢的中断退出。我看到有一个getgraphicsEvent函数,但它声称不支持该设备(x11)。无论如何,它似乎并不支持onclose事件,只支持onmousedown。

    有什么解决办法吗?

    编辑:感谢Dirk提供查看tk接口的建议。以下是我的测试代码:

    require(tcltk)
    library(tkrplot)
    
    ## function to display plot, called by tkrplot and embedded in a window
    plotIt<-function(){ plot(x=1:10, y=1:10) }
    ## create top level window
    tt<-tktoplevel()
    ## variable to wait on like a condition variable, to be set by event handler
    done <- tclVar(0)
    ## bind to the window destroy event, set done variable when destroyed
    tkbind(tt,"<Destroy>",function() tclvalue(done) <- 1)
    ## Have tkrplot embed the plot window, then realize it with tkgrid
    tkgrid(tkrplot(tt,plotIt))
    ## wait until done is true
    tkwait.variable(done)
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   Dirk is no longer here    14 年前

    你需要一个独特的事件循环——最好的 便携式的 解决方案是依赖(已包含) tcltk 包裹。从演示开始。

    最简单的情况可能是

    > library(tcltk)
    > tk_messageBox(message="Press a key")
    

    它会弹出一个框,您需要确认才能继续。