1

我正在尝试使用 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)时按预期工作。

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

有没有办法“强制”处理函数来识别使用渐变创建的单选按钮的默认选择值?我怀疑这个值只有在用户主动点击默认选项以外的选项时才会被识别,但默认选项不会被识别似乎违反直觉。

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

任何解决此问题的帮助将不胜感激。

提前致谢!

伊莎贝拉

4

2 回答 2

0

这里有一个解决方法。您将默认值设置为所需的值,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")
                         }
                       }
)
于 2013-06-27T21:56:14.363 回答
0

您遇到的问题是处理程序仅响应事件。@agstudy 调用 svalue 的解决方案在大多数情况下应该可以工作,因为底层小部件会发生变化,但可能不适用于所有小部件。您可以通过将处理程序保留为您可以单独调用的函数来强制它。

于 2013-06-28T00:38:13.250 回答