我正在构建我的第一个GUI,我希望它从Spin Buttons和文本框中获取基本的数字输入,并使用这些值填充数据框,然后在最后按下按钮将它们插入某个函数。然而,我无法弄清楚它的连接部分。我已经看到了我想要它的窗口,并且我将所有旋转按钮校准为具有所需的默认值并增加正确的增量数,但是然后我无法将其传递给我的模型。我已预先分配了一个数据帧,然后我想为数据框中的每个元素分配特定值,并使用文本框中的输入命名列。到目前为止,我试过简单地分配它们没有成功。我也尝试将它们作为全局变量,然后在最后将它们放入数据框中,但也没有运气。我确定我在gSignalConnect()
命令中遗漏了一些内容,但我无法理解。下面给出了一个文本框和一个旋转按钮的代码,以及我的“计算”按钮的代码(为了空间,我在colMeans()
替换了我的函数)。
df <- data.frame(matrix(nrow=8,ncol=5))
library(RGtk2)
window <- gtkWindow()
window["title"]<- "My First GUI"
# Add a frame
frame <- gtkFrameNew("Input")
window$add(frame)
# Create vertical container for file name entry
vbox<- gtkVBoxNew(FALSE, 9)
frame$add(vbox)
# Add horizontal container for every widget line
hbox<-gtkHBoxNew(FALSE, 4)
vbox$packStart(hbox, FALSE, TRUE)
label <- gtkLabelNewWithMnemonic("Dataframe Column 1 ")
hbox$packStart(label,FALSE,TRUE)
# Add a text box that allows the user to name Dataframe Column1
col1nameLAB<-gtkLabel('Name: ')
col1name<-gtkEntryNew()
col1name$setWidthChars(20)
hbox$PackStart(col1nameLAB)
hbox$PackStart(col1name,FALSE,TRUE)
gSignalConnect (col1name,"value-changed",function (entry) {
names(df)[1] <- (entry$getText()}))
# Add a spin button for a numerical value that will eventually be the first value in Column 1 of the dataframe
col1valLAB <- gtkLabel("Integer Value: ")
col1valADJ <- gtkAdjustment(30,1,100,1)
col1valSB <- gtkSpinButton(col1valADJ,1,0)
gtkSpinButtonSetValue(col1valSB, 30)
hbox$PackStart(col1valLAB)
hbox$PackStart(col1valSB)
gSignalConnect (col1valSB,"value-changed",function (entry) {
df[1,1]<-entry$getValue()})
# Add a button to recalculate the model
hbox = gtkHBoxNew(FALSE,1)
vbox$packStart(hbox, FALSE, FALSE, 0)
button <- gtkButtonNew ( )
button$setLabel ( "Calculate" )
hbox$ packStart ( button )
# Now specify what happens when button is clicked:
gSignalConnect (button, "clicked",
f<-function( widget) {
colmeans(df)
} )
答案 0 :(得分:1)
这有效,不确定哪些不适合你:
library(RGtk2)
df <- data.frame(a=1)
w <- gtkWindow()
col1valADJ <- gtkAdjustment(30,1,100,1)
col1valSB <- gtkSpinButton(col1valADJ,1,0)
w$add(col1valSB)
gSignalConnect(col1valSB, "value-changed", function(entry, ...) {
val <- entry$getValue()
message("Change to ", val)
names(df)[1] <<- val
})