以下代码显示将项目向量分配给gcombobox
将导致在现有项目向量的每个元素上循环gcombobox
处理程序(尝试点击,例如"a"
或"b"
,您会看到来自gcombobox
的多条打印消息。如果b2
更改为gradio
按钮,则不会发生此循环。此外,如果使用tcltk工具包,那么我们也没有问题。这在GUI中导致问题,其中b2
的处理程序更复杂并且操纵一些大数据。任何阻止这种循环的建议都会很棒!
options("guiToolkit"="RGtk2")
library(gWidgets)
w=gwindow()
b1=gradio(c("a","b"),container=w)
b2=gcombobox(c(1:2),container=w)
addHandlerClicked(b1,handler=function(h,...) b2[,]=c(1:10))
addHandlerClicked(b2,handler=function(h,...) print("clicked b2"))
答案 0 :(得分:0)
您可以阻止处理程序然后取消阻止,如下所示:
w=gwindow()
b1=gradio(c("a","b"),container=w)
b2=gcombobox(c(1:2),container=w)
id = addHandlerClicked(b2,handler=function(h,...) print("clicked b2"))
addHandlerClicked(b1,handler=function(h,...) {
blockHandler(b2, id)
b2[,]=c(1:10)
unblockHandler(b2, id)
})
我翻转了赋值顺序以获取处理程序ID。
或者,在gWidgets2中(仍然只在Github上)它只是起作用,因为b2的可选项的这种分配不是设置b2的选定值。 (您可能需要手动完成)
options("guiToolkit"="RGtk2")
library(gWidgets2)
w=gwindow()
g = ggroup(cont=w) ## only one child for a gwindow instance is enforced
b1=gradio(c("a","b"),container=g)
b2=gcombobox(c(1:2),container=g, expand=TRUE)
id = addHandlerChanged(b2,handler=function(h,...) print("clicked b2"))
addHandlerChanged(b1,handler=function(h,...) {
b2[]=c(1:10)
})