Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将上下文菜单添加到“gframe”?_R_Contextmenu_Gwidgets - Fatal编程技术网

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

如何将上下文菜单添加到“gframe”?,r,contextmenu,gwidgets,R,Contextmenu,Gwidgets,如何将上下文菜单添加到gWidgets2中的gframe?我尝试了以下构造,但似乎无法将addPopupMenu附加到gframe: require(gWidgets2) w <- gwindow("gformlayout", visible=T) f <- gframe("frame", horizontal=FALSE, container=w) l <- glabel("Lorem ipsum dolor sit amet, \nconsectetur adipi

如何将上下文菜单添加到
gWidgets2
中的
gframe
?我尝试了以下构造,但似乎无法将
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)
但是当我在
标签上右键单击
时,我只会得到用于选择文本的标准Gtk上下文菜单:

使用Ubuntu14.04和Gtk+2.24.23。My
sessionInfo()


一个弹出菜单在鼠标点击后弹出一个菜单,通常是鼠标右键点击。 gwidget中实现的是函数1add3rdmousepopupmenu
(您想要的)和
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)
>w g glabel(“你好”,cont=g)
guiWidget类型:gLabelRGtk for toolkit:guiwidgettoolkitrgtk2

>world lst lst$world$handler@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

f它与
add3rdmousepoppupmenu
有关,我说这是基于对源代码的浏览。如果我有时间的话,我会尽力为你制定一个合适的解决方案。HTH.我尝试了这个方法,但是
add3rdmousepoppupmenu(world,lst)
和'addPopupMenu(world,lst)`都会导致UseMethod(“getBlock”)中的
错误:在使用
gWidgets2
时,没有适用于“function”类的对象的“getBlock”方法。不确定出了什么问题。@landroni我会尽力帮你的。你应该把它加到问题中,或者把它们分成两个不同的问题。我会尽快更新我的解决方案,只要我知道是什么原因导致了你的错误。请包含导致该错误的确切代码。我无法复制该错误,也看不到任何与此相关的搜索结果。。。你能给出一个可复制的例子吗?我只是简单地运行了
require(gWidgets2)
,然后是你发布的代码,而不是最后一行:
add3rdmousepoppupmenu(world,lst)
。谢谢@NerdLife。文档并不总是正确的,但我很乐意尝试和更新。我需要更清楚地了解
gWidgets
gWidgets2
之间的区别。大多数情况都是相似的,但有足够的更改使附加的
2
得到保证。任何用于
gWidgets
的文档都是旧的,即使包是最近更新的。关于可用性的观点很好,这让我想到了一种不同的GUI方法。然而,上面的代码似乎不起作用:我仍然得到一个文本小部件的GTK标准菜单。也许应该首先将
glabel
设置为不可选择?例如,如果您选择
l2@landroni Oops,则应将其设置为
add3rdmousepoppup菜单
。(我需要为
add3rdmousepoppupmenu
创建一个别名,因为驼峰式的外壳看起来更自然。)这在linux上可以工作。如果这个改变不起作用,请告诉我。奇怪。在Linux上,我也不会得到一个带有代码的c菜单(即使是在纠正错误并使用正确的
add3rdmousePopupMenu
)。
l$widget$setSelectable(FALSE)
应该这样做。
> 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)
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