可以使用R gWidgets创建时间旋转控件吗?
我可以用R gWidgets创建一个如下所示的时间旋转控件吗 我尝试创建自己的:可以使用R gWidgets创建时间旋转控件吗?,r,user-interface,gwidgets,R,User Interface,Gwidgets,我可以用R gWidgets创建一个如下所示的时间旋转控件吗 我尝试创建自己的: w <- gwindow(height = 30) glabel(container = w, "H:") analysisTimeStartH <- gspinbutton(container = w, from = 0, to = 23, by = 1) glabel(container = w, "M:") analysisTimeStartM <- gspinbutton(contain
w <- gwindow(height = 30)
glabel(container = w, "H:")
analysisTimeStartH <- gspinbutton(container = w, from = 0, to = 23, by = 1)
glabel(container = w, "M:")
analysisTimeStartM <- gspinbutton(container = w, from = 0, to = 59, by = 1)
glabel(container = w, "S:")
analysisTimeInterval <- gspinbutton(container = w, from = 0, to = 59, by = 1)
不幸的是,有一个基本假设,即要从中选择的值是数字。这对于tcltk来说是不必要的,但对于Gtk来说似乎是必要的,所以很可能不会改变。你的方法可以发挥作用。以下是关于您的方法的更多信息,这些方法实施了一些限制:
library(gWidgets2)
options(guiToolkit="tcltk")
TimeSpinner <- setRefClass("TimeSpinner",
fields=c("hour", "minute", "second"),
methods=list(
initialize = function(container, h=0, m=0, s=0, ...) {
g <- ggroup(cont=container)
hour <<- gspinbutton(from=0, to=23, by=1, value=h, cont=g)
minute <<- gspinbutton(from=-1, to=60, by=1, value=m, cont=g)
second <<- gspinbutton(from=-1, to=60, by=1, value=s, cont=g)
add_handlers()
callSuper(...)
},
get_value=function() {
list(hour=svalue(hour), minute=svalue(minute), second=svalue(second))
},
set_value=function(h,m,s) {
hour$set_value(h)
minute$set_value(m)
second$set_value(s)
},
add_handlers=function() {
addHandlerChanged(hour, function (h,...) {
val <- svalue(hour)
if (val < 0)
hour$set_value(0)
else if (val > 23)
hour$set_value(23)
})
addHandlerChanged(minute, function(h,...) {
val <- svalue(minute)
if (val == -1) {
minute$set_value(59)
hour$set_value(svalue(hour) - 1)
} else if(val == 60) {
minute$set_value(0)
hour$set_value(svalue(hour) + 1)
}
})
addHandlerChanged(second, function(h,...) {
val <- svalue(second)
if (val == -1) {
second$set_value(59)
minute$set_value(svalue(hour) - 1)
} else if(val == 60) {
second$set_value(0)
minute$set_value(svalue(hour) + 1)
}
})
}
))
w <- gwindow()
ts <- TimeSpinner$new(w)
库(gWidgets2)
选项(guiToolkit=“tcltk”)
时间微调器
library(gWidgets2)
options(guiToolkit="tcltk")
TimeSpinner <- setRefClass("TimeSpinner",
fields=c("hour", "minute", "second"),
methods=list(
initialize = function(container, h=0, m=0, s=0, ...) {
g <- ggroup(cont=container)
hour <<- gspinbutton(from=0, to=23, by=1, value=h, cont=g)
minute <<- gspinbutton(from=-1, to=60, by=1, value=m, cont=g)
second <<- gspinbutton(from=-1, to=60, by=1, value=s, cont=g)
add_handlers()
callSuper(...)
},
get_value=function() {
list(hour=svalue(hour), minute=svalue(minute), second=svalue(second))
},
set_value=function(h,m,s) {
hour$set_value(h)
minute$set_value(m)
second$set_value(s)
},
add_handlers=function() {
addHandlerChanged(hour, function (h,...) {
val <- svalue(hour)
if (val < 0)
hour$set_value(0)
else if (val > 23)
hour$set_value(23)
})
addHandlerChanged(minute, function(h,...) {
val <- svalue(minute)
if (val == -1) {
minute$set_value(59)
hour$set_value(svalue(hour) - 1)
} else if(val == 60) {
minute$set_value(0)
hour$set_value(svalue(hour) + 1)
}
})
addHandlerChanged(second, function(h,...) {
val <- svalue(second)
if (val == -1) {
second$set_value(59)
minute$set_value(svalue(hour) - 1)
} else if(val == 60) {
second$set_value(0)
minute$set_value(svalue(hour) + 1)
}
})
}
))
w <- gwindow()
ts <- TimeSpinner$new(w)