首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gcombobox (带Gtk2)事件循环

gcombobox (带Gtk2)事件循环
EN

Stack Overflow用户
提问于 2013-03-26 22:17:48
回答 1查看 242关注 0票数 0

以下代码显示,将项目向量分配给gcombobox将导致gcombobox处理程序在现有项目向量的每个元素上循环(例如,尝试单击"a""b",您将看到来自gcombobox的多个打印消息)。如果将b2更改为gradio按钮,则不会发生此循环。此外,如果使用tcltk工具包,那么我们也不会有问题。这给我在图形用户界面中带来了问题,在图形用户界面中,b2的处理程序更加复杂,并且需要处理一些大型数据。任何防止这种循环的建议都是很棒的!

代码语言:javascript
复制
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"))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 05:33:12

您可以阻止处理程序,然后取消阻止,如下所示:

代码语言:javascript
复制
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的选定值。(您可能希望手动完成此操作)

代码语言:javascript
复制
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)
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15639354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档