gwidgets2:如何在更改gbutton值时阻止gbutton处理程序运行?

时间:2015-05-19 23:38:23

标签: r handler gwidgets

如何在不运行与其处理程序关联的功能的情况下更改gbutton文本?

请考虑以下代码:

library(gWidgets2)
w <- gwindow("Buttons", visible=FALSE)
g <- ggroup(cont=w, horizontal=FALSE)

b2 <- gbutton("ouvrir", cont=g)

## with a handler
b4 <- gbutton("click me", 
              handler=function(h,...) {
                if(svalue(b2) == "open")
                  svalue(b2) <- "ouvrir"
                else
                  svalue(b2) <- "open"
                }, 
              action = NULL, cont=g)

visible(w) <- TRUE

svalue(b4) <- "Please not call the handler!!"

在gWidgets2中,当我通过svalue()命令更改按钮文本时,会调用按钮处理程序!但是,我想在单击按钮时调用处理程序。任何解决这种情况的建议。

提前致谢。

1 个答案:

答案 0 :(得分:1)

设置标签时,代码会调用invoke_change_handler()。有几种方法可以解决这个问题:

  • 在设置(blockHandlers)之前阻止处理程序,然后取消阻止(unblockHandlers

  • 你可以抓住底层小部件并设置文本,在RGtk2中使用gWidgets2,obj$widget$setText("new value")之类的东西应该有效。