R中的gWidgets2包中的gtable小部件在单击新值时返回先前选定的值。如果使用键盘箭头选择一个值,然后输入以激活当前选择,则返回。这对我来说是出乎意料的行为。如果这是它应该通过设计工作的方式,那么在这两种情况下,我如何才能得到当前的选择?
编辑:--它看起来像预期的那样使用gWidgets工作,所以它可能是gWidgets2中的一个bug。启动一个新的R会话,并在下面的示例中更改为gWidgets2 -> gWidgets和gvbox -> ggroup。
require(gWidgets2)
# Select by clicking (Clicked) or hit Enter (Changed)
# Move using mouse or arrow keys.
# Create the example (adopted from the gtable example)
w <- gwindow("gtable example", visible=FALSE)
g <- gvbox(cont=w)
tbl <- gtable(mtcars, cont=g, expand=TRUE, fill=TRUE)
addHandlerClicked(tbl, handler = function(h, ...) {
print("Clicked returns the previously selected value.")
print(svalue(tbl))
} )
addHandlerChanged(tbl, handler = function(h, ...) {
print("Changed returns the currently selected value.")
print(svalue(tbl))
} )
visible(w) <- TRUER版本3.4.1 (2017-06-30),平台:x86_64-W64-mingw32 32/ x64 (64位),运行于: Windows 7 x64 (build 7601) Service Pack 1包:gWidgets2 2_1.0-7,gWidgets2RGtk 2_1.0-6,RGtk2_2.20.33
发布于 2017-07-24 05:22:13
@jverzani在GitHub https://github.com/jverzani/gWidgets2/issues/94#issuecomment-316739581上的答复
对不起,我这里没有很好的解决办法。我以为我知道,但我想不出来。问题是在更新小部件之前调用gWidgets2观察者。我以为用不同的方式安排处理程序会有效,但是. 解决办法是不以这种方式连接,而是使用
addHandlerSelectionChanged--这提供了一次单击和键盘响应,但对双击没有很好的效果。或者,双击应该“激活”发起回调的单元格,因此不分配给单击处理程序是可能的,只分配给更改处理程序就可以进行双击和键盘选择,而不是单次单击,这只会设置所选内容,但不会启动回调。
在我的申请中,它似乎像预期的那样起作用。我只在一个地方使用addHandlerChanged,在另一个地方只使用addHandlerSelectionChanged。
https://stackoverflow.com/questions/45183050
复制相似问题