R - winDialogString相当于tcltk(tkdialog?)

时间:2012-03-14 07:28:12

标签: r user-interface tcl tk

tcltk中的winDialogString相当于什么?


背景

我一直在R中使用readline,以便向用户提问并获得回复:

response <- readline("What's the air speed velocity of an unladen swallow? ")

今天我在我的Windows笔记本电脑上发现了winDialogString功能,弹出一个小模态消息框来获取输入:

response <- winDialogString("What's the air speed velocity of an unladen swallow? ",
                            default="african or european?")

我希望使用此功能,但为了便于携带,我想使用tcltk版本的winDialog,所以至少我的Linux机箱也可以使用它。

现在,如果我使用的是winDialog,则等效值为tkmessageBox

# fairly equivalent, tkmessageBox is more portable.
winDialog(type='yesno','Do you like green eggs and ham?')
tkmessageBox(type='yesno',message='Do you like green eggs and ham?')

tcltk中的winDialogString相当于什么?

我以为是tkdialog,所以我试了一下:

tkdialog("What's the air speed velocity of an unladen swallow?")

它给了我这个错误:

Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] wrong # args: should be "tk_dialog w title text bitmap default ...".

文档非常无益?tkdialog指向没有特定文档的通用tk帮助页面。我如何使用tkdialog(甚至是我想要的?)

我推断我可能不得不提供它所抱怨的所有论据,所以我尝试了一些事情:

> tkdialog(title='',
           text="What's the air speed velocity of an unladen swallow?",
           bitmap='',default="african or european?")
Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] bad window path name "-title".

> tkdialog(tktoplevel(),title='',
           text="What's the air speed velocity of an unladen swallow?",
           bitmap='',default="african or european?")
Error in structure(.External("dotTclObjv", objv, PACKAGE = "tcltk"), class = "tclObj") : 
  [tcl] bitmap "-text" not defined.

我怎样才能让它发挥作用?我宁愿呆在tcltk而不是gWidgets之类的东西,因为tcltk在大多数R发行版中(如果R发行版是tcltk - 不相容,我'我会回到readline)。

欢呼声。

1 个答案:

答案 0 :(得分:3)

你所追求的最接近的是tkdialog,但它并不是真正设计用于R;你将不得不做一些工作(我完全承认不知道R,我在Tk方面)。我能做的就是解释那些参数需要做什么。

有基础tk_dialog命令online的文档。特别是,您需要:

  1. 不用于其他任何内容的窗口名称。 (这将成为用于实现对话框的窗口的名称。)
  2. 对话框的标题。
  3. 对话框正文的一些文字。
  4. 要使用的位图图片的字符串名称。除非您正在做一些非常粗糙和低级别的事情,否则必须是:errorgray75gray50gray25gray12,{{ 1}},hourglassinfoquestheadquestion(或者在OSX上,您还可以获得以下奖励系统图片: warningdocumentstationeryeditionapplicationaccessoryfolderpfoldertrashfloppyramdiskcdrompreferencesquerydocstopnote)。
  5. 默认按钮的从零开始的索引。如果为-1,则没有默认值。
  6. (好吧,6,7,......)放在按钮上的文字,每个按钮一个字符串。
  7. API实际上并没有完全用于从R中使用。它在Tcl中也不是特别好用,而且位图列表真的模糊不清(而且这就是其中一个Tk的维护者)。如果您感兴趣,列表 documented,但我并不感到惊讶您不知道那是您想要的。除了你正在使用caution(它本身已经过时)之外,我不会告诉你它。


    您也可以自己实施。执行简单对话的代码并不复杂(tk_dialog纯粹是在传统功能之上编写脚本)。我不是一个足够好的R程序员,但能够帮助你做到这一点。