【发布时间】:2015-07-30 16:45:48
【问题描述】:
我正在 R 中创建一个包,它将通过 tcltk 包具有 GUI 界面。前端函数将通过 GUI 从用户那里获取数据,并调用后端函数将结果返回给前端。目前我已经编写了所有函数的文档,除了这部分和一些bug测试之外,函数也完成了。
为了帮助用户,我希望能够打印文档。在 Rstudio 中,它会显示在帮助窗口中(需要注意的是,这个窗口不是我的代码通过 tcltk 包创建的,这个窗口是 Rstudio 的一部分)。
如果我的函数只通过命令行与用户交互,我可以让 Rstudio 中的帮助屏幕立即更新。但是,如果我正在使用图形,则帮助窗口在功能完成之前不会更新,这违背了让它首先打印帮助屏幕的目的。
以下是通过 tcltk 包创建的 GUI 窗口示例。我在这里使用 var.test 作为示例文档,因此请确保您的帮助窗口位于其他位置,以便查看帮助屏幕何时更新。
require(tcltk)
print(help(var.test))
hi <- tktoplevel() #creates a window
ok <- function() # this function is called by pushing the button defined below
{
print("Goodbye, World!")
tkdestroy(hi) # destroys the window
}
print("Hello, World!")
ok.button <- ttkbutton(hi, text = "This is a button", command = ok) #defines the button
tkgrid(ok.button) #puts the button on the window "hi"
tkfocus(hi)
tkwait.window(hi)
如您所见,即使在创建 tcltk 图形窗口之前先调用帮助函数,也不会更新帮助窗口。打印功能似乎仍然有效,因为在按下按钮之前打印了“Hello, World”。
为了让我的功能正常工作,我必须使用 tkwait.window(),否则前端不会与后端同步。
如果真的不可能更新 Rstudio 窗口,那么使用不同窗口或程序的替代解决方案是可以接受的。
【问题讨论】: