以下代码显示,将项目向量分配给gcombobox将导致gcombobox处理程序在现有项目向量的每个元素上循环(例如,尝试单击"a"或"b",您将看到来自gcombobox的多个打印消息)。如果将b2更改为gradio按钮,则不会发生此循环。此外,如果使用tcltk工具包,那么我们也不会有问题。这给我在图形用户界面中带来了问题,在图形用户界面中,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"))发布于 2013-03-27 05:33:12
您可以阻止处理程序,然后取消阻止,如下所示:
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)
})https://stackoverflow.com/questions/15639354
复制相似问题