如何将'ggroup'从'horizontal=TRUE'动态切换到'horizontal=FALSE`?

如何将'ggroup'从'horizontal=TRUE'动态切换到'horizontal=FALSE`?,r,containers,gwidgets,R,Containers,Gwidgets,在已经可见的gWidgets2 GUI中,如何将ggroup从horizontal=TRUE更改为horizontal=FALSE?考虑以下事项: w <- gwindow("Box containers") g <- ggroup(horizontal=TRUE, cont=w) gbutton("one", cont=g); gbutton("two", cont=g) w这可能无法跨平台工作,但对于Gtk,它可以: w = gwindow() g = ggroup(cont=

在已经可见的gWidgets2 GUI中,如何将
ggroup
horizontal=TRUE
更改为
horizontal=FALSE
?考虑以下事项:

w <- gwindow("Box containers")
g <- ggroup(horizontal=TRUE, cont=w)
gbutton("one", cont=g); gbutton("two", cont=g)

w这可能无法跨平台工作,但对于Gtk,它可以:

w = gwindow()
g = ggroup(cont=w)
g1 = ggroup(cont=g)
g2 = ggroup(cont=g, horizontal=FALSE)
b1 = gbutton("asdf", cont=g1)
b2 = gbutton("asdfadfasd", cont=g1)
## reparent by deleting, then adding:
delete(g1, b1)
delete(g1, b2)
add(g2, b1)
add(g2, b2)

另一种类似于公认答案的方法是
添加
/
删除
容器本身,而不是按钮:

w = gwindow()
g = ggroup(cont=w)
g1 = ggroup(cont=g)
b1 = gbutton("asdf", cont=g1)
b2 = gbutton("asdfadfasd", cont=g1)
g2 = ggroup(cont=g, horizontal=FALSE)
b1bis = gbutton("asdf", cont=g2)
b2bis = gbutton("asdfadfasd", cont=g2)
delete(g, g2)
## reparent by deleting, then adding:
delete(g, g1)
add(g, g2)
## switch back to original layout
delete(g, g2)
add(g, g1)

这并不容易。在
Qt
中,底层小部件允许这种行为,但据我所知,不是
Gtk
。如果你真的想这样做,你可以重新租,但这会很棘手。嗯,你说的“重新租”是什么意思?将
g
放入另一个
ggroup
对象?如果你能举个例子的话,那就太好了..效果很好。事实上,我找到了一个看起来更优雅的解决方案,我将其作为一个单独的答案发布。对于这种操作,您还应该查看
gstackwidget
。另一种解决方案的优点是不需要重置任何信号处理程序。您还可以通过
sapply
迭代容器的
children
属性来执行删除/插入操作。
gstackwidget
样式或您的样式将与
gWidgets2tcltk
一起使用,另一个则不会。听起来很有趣,但我对
gstackwidget
不是很熟悉。你会考虑使用这个方法添加一个例子吗?很简单:用<代码> G= GSTACKWIDGET(CONT= W)替换你的<代码> G <代码>。然后不删除g1或g2,只需通过
svalue(g)切换
w = gwindow()
g = ggroup(cont=w)
g1 = ggroup(cont=g)
b1 = gbutton("asdf", cont=g1)
b2 = gbutton("asdfadfasd", cont=g1)
g2 = ggroup(cont=g, horizontal=FALSE)
b1bis = gbutton("asdf", cont=g2)
b2bis = gbutton("asdfadfasd", cont=g2)
delete(g, g2)
## reparent by deleting, then adding:
delete(g, g1)
add(g, g2)
## switch back to original layout
delete(g, g2)
add(g, g1)