如何将上下文菜单添加到`gframe`?

时间:2014-08-26 18:55:32

标签: r contextmenu gwidgets

如何向gframe中的gWidgets2添加上下文菜单?我尝试了以下构造,但似乎我无法将addPopupMenu附加到gframe

 require(gWidgets2)
 w <- gwindow("gformlayout", visible=T)
 f <- gframe("frame", horizontal=FALSE, container=w)
 l <- glabel("Lorem ipsum dolor sit amet, \nconsectetur adipiscing elit.", container=f)
 b <- gbutton("change name", container=f, handler=function(h,...) {
     names(f) <- "new name"
 })
 lst <- list(gaction('world', handler=function(h,...) svalue(world) <- "world"), 
             gaction('continent', handler=function(h,...) svalue(world) <- "continent"), 
             gaction('country', handler=function(h,...) svalue(world) <- "country"), 
             gaction('state', handler=function(h,...) svalue(world) <- "state"))
 add3rdmousePopupMenu(f, lst)
 #addPopupMenu(f, lst)
 add3rdmousePopupMenu(b, lst)

上下文菜单可以很好地附加到按钮,但不能附加到gframe。那么如何添加右键单击gframe标签时弹出的上下文菜单?


更新
根据答案,我尝试了以下代码:

require(gWidgets2)
f <- gframe("", cont=gwindow())
l <- glabel("label")                    # no cont argument
add3rdmousePopupMenu(l, list(a=gaction("Hi"))) 
f$block$setLabelWidget(l$block)         # the voodoo

但是当我在right-clicklabel时,我只会获得用于选择文字的标准Gtk上下文菜单:

enter image description here

使用Ubuntu 14.04和Gtk + 2.24.23。我的sessionInfo()

> sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-pc-linux-gnu (64-bit)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] splines   grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] reshape2_1.4         gWidgets2RGtk2_1.0-3 memoise_0.2.1        Hmisc_3.14-4         Formula_1.1-1       
 [6] survival_2.37-7      lattice_0.20-29      RGtk2_2.20.29        gWidgets2_1.0-6      digest_0.6.4        

loaded via a namespace (and not attached):
[1] cluster_1.14.4      latticeExtra_0.6-26 plyr_1.8.1          RColorBrewer_1.0-5  Rcpp_0.11.2        
[6] stringr_0.6.2       tools_3.0.2 

2 个答案:

答案 0 :(得分:1)

点击鼠标后弹出菜单“弹出”菜单,通常是鼠标右键单击。 在gWidgets中实现的是函数1add3rdmousepopupmenu (the one you want) and addpopupmenu`,用于任何点击的弹出窗口。使用gmenu的语法指定菜单。

一个简单的例子就是:

> w <- gwindow("Click on button to change")
> g <- ggroup(cont = w) # abbreviate container
> glabel("Hello ", cont=g)
guiWidget of type: gLabelRGtk for toolkit: guiWidgetsToolkitRGtk2
> world <- gbutton("world", cont=g)
> lst <- list()
> lst$world$handler <- function(h,...) svalue(world) <- "world"
> lst$continent$handler <- function(h,...) svalue(world) <- "continent"
> lst$country$handler <- function(h,...) svalue(world) <- "country"
> lst$state$handler <- function(h,...) svalue(world) <- "state"
> add3rdmousepopupmenu(world, lst)

我有机会对此进行测试,它适用于gWidgetsgWidgets2gWidgetsRGtk2在Windows上使用64位R 3.1.1。您可以找到add3rdmousepopupmenu处理程序

的文档
    {li}在gWidgets2手册here或中
  1. 键入??add3rdmousepopupmenu加载gWidgets2
  2. recently updated document by the author John Verzani中提供了gWidgets API的示例,该示例不仅适用于gWdigets2,还适用于他的gWidgetsgWidgetsQtgWidgetsRGtk2和调用 gWdigets API
  3. gWidgetsrJava个包
  4. 以及CRAN上的gWidgets2 vignette

答案 1 :(得分:1)

@landroni我没有检查,但如果弹出菜单可以直接添加到gframe标签,会感到惊讶。但是使用Gtk可以解决一些问题。以下是如何将弹出菜单放在标签位置:

f <- gframe("", cont=gwindow())
l <- glabel("label")                    # no cont argument
add3rdmousePopupMenu(l, list(a=gaction("Hi"))) 
f$block$setLabelWidget(l$block)         # the voodoo
l$widget$setSelectable(FALSE)           # may not be needed

至于这对用户是否直观,我会让你决定....