在R package gWidgets中使用gradio函数创建的单选按钮的处理程序功能

时间:2013-06-27 20:31:39

标签: r gwidgets

我正在尝试使用R中gWidgets包中的函数gradio为R GUI应用程序创建单选按钮。这是一个简单的R代码示例,我用它来创建这样一个按钮,它为用户提供了一个选项。选择“选择1”和“选择2”。

require(gWidgets)

require("RGtk2")

options("guiToolkit"="RGtk2")

radio_button <- gradio(c("Choice 1","Choice 2"),
                         selected=1, index=FALSE,
                         horizontal=FALSE, 
                         container=gwindow(), 
                         handler=function(h,...){
                          if (svalue(h$obj)=="Choice 1"){
                              print("Do something")
                          } else { 
                           print("Do something else")
                          }
                          }
                         )

我遇到的问题是,当用户主动从单选按钮(选项1)的默认选项切换到另一个可用选项(选择2)时,与单选按钮关联的处理程序功能仅按预期工作。 / p>

但是,如果用户将“默认选择(选项1)”保留为“原样”,则处理函数无法识别此默认选项的值。

有没有办法“强制”处理程序函数识别使用gradio创建的单选按钮的默认选项的值?我怀疑只有当用户主动点击默认选项以外的选项时才会识别此值,但似乎违反了默认选项无法识别。

请注意,我遇到了gcheckboxgroup()函数的相同(奇数?)行为,该函数用于生成一组复选框。

非常感谢任何解决此问题的帮助。

提前致谢!

伊莎贝拉

2 个答案:

答案 0 :(得分:0)

这是一个解决方法。 Yous使用svalue将默认值设置为所需的值,如下所示:

svalue(radio_button, index=TRUE) <- 1  ## by index

所有代码变为:

radio_button <- gradio(c("Choice 1","Choice 2"),
                       selected=2, index=FALSE,
                       horizontal=FALSE, 
                       container=gwindow(), 
                       handler=function(h,...){
                         if (svalue(h$obj)=="Choice 1"){
                           print("Do something")
                         } else { 
                           print("Do something else")
                         }
                       }
)

答案 1 :(得分:0)

您遇到的问题是处理程序仅响应事件。 @agstudy调用svalue的解决方案应该在大多数情况下都可以工作,因为底层窗口小部件会被更改,但可能不适用于所有窗口小部件。你可以将处理程序作为一个可以单独调用的函数来强制它。