11

我怎样才能为用户提供 5 秒的时间来写一些东西,以便请求无限长的暂停。如果在这 5 秒内没有要求暂停,则该过程继续。如果需要暂停,则用户拥有他需要的所有时间,并且他可以点击“输入”以便在他想要的任何时候恢复该过程。

这种功能的有趣之处在于,如果用户不在,则暂停仅持续 5 秒。并且如果用户在场,那么他可以享受暂停以观看例如已经生成的图表。

代码最终可能如下所示:

DoYouWantaPause = function(){
   myprompt = "You have 5 seconds to write the letter <p>. If you don't the process will go on."

   foo = readline(prompt = myprompt, killAfter = 5 Seconds)    # give 5 seconds to the user. If the user enter a letter, then this letter is stored in `foo`.

   if (foo == "p" | foo == "P") {    # if the user has typed "p" or "P"
        foo = readline(prompt = "Press enter when you want to resume the process")  # Offer a pause of indefinite length
   }
}

# Main
for (i in somelist){
    ...
    DoYouWantaPause()
}
4

1 回答 1

10

这是一个基于 tcltk 和 tcltk2 包的快速小功能:

library(tcltk)
library(tcltk2)

mywait <- function() {
    tt <- tktoplevel()
    tmp <- tclAfter(5000, function()tkdestroy(tt))
    tkpack( tkbutton(tt, text='Pause', command=function()tclAfterCancel(tmp)))
    tkpack( tkbutton(tt, text='Continue', command=function()tkdestroy(tt)),
        side='bottom')
    tkbind(tt,'<Key>', function()tkdestroy(tt) )

    tkwait.window(tt)
    invisible()
}

运行mywait,会弹出一个带有 2 个按钮的小窗口,如果您不执行任何操作,大约 5 秒后该窗口将消失并mywait返回,允许 R 继续。如果您随时单击“继续”,它将立即返回。如果您单击“暂停”,则倒计时将停止,它会等待您单击继续(或按一个键),然后再继续。

这是此处给出的答案的扩展。

于 2014-12-10T21:04:54.150 回答