2

gWidgetsRGtk2R で記述したプログラムを使用して GUI を作成しようとしています。私の GUI にはgedit()、ユーザーがプログラムに入れる入力データ ファイルのファイル パスを入力できるテキスト ボックスがあります。また、「参照」ボタンもあり、クリックするとボックスが開き、gfile()必要なファイルを参照できます。私が問題を抱えているのはgedit()、ユーザーが「参照」ボタンを使用してファイルを選択した後、ボックス内の値を更新することです。以下のコードはこれをより明確にするかもしれません:

dir <- getwd()
sfilepath <- paste0(dir,"/")
win = gwindow("Set Parameters:",width=400,height=550)
nb = gnotebook(cont=win)
tab2 <- glayout(cont=nb, label = "Advanced Settings")
tab1 <- glayout(cont=nb, label = "Basic Settings")
tab1[2,2] <- glabel("BD:",cont=tab1)
tab1[2,4:5] <- gedit(1,cont=tab1)
addhandlerkeystroke(tab1[2,4],handler=function(h,...){BD <<- as.numeric(svalue(h$obj))})
tab1[3,2:5] <- gseparator(cont=tab1)
tab1[4,2:5] <- glabel("File path:",cont=tab1)
tab1[5,2:4] <- gedit(paste0(dir,"/"),cont=tab1)
tab1[5,5] <- gbutton(text="Browse", handler=function(h,...){ gfile("Select a file",type="open", filter = list("text files" = list(patterns = c("*.csv","*.txt")), "R files" =list(patterns = c("*.R","*.Rdata"))), handler = function(h,...){ sfilepath <<- h$file},cont=TRUE)},cont=tab1)
addhandlermousemotion(tab1[5,2],handler=function(h,...){svalue(h$obj) <- sfilepath})

これまでのところaddhandlermousemotion、上記のコードのように を使用してみました。したがって、ボックス内のテキストはgedit()、ボックス自体の上にマウスを移動したときにのみ更新されます。ただし、ボックス内のテキストが即座に更新されることを希望します。

addhandleridle()また、ボックス内のテキストが 1 秒ごとに自動的に更新されるように、1 秒間隔で を使用してみました。これはうまくいきました。ただし、入力されていた新しい「sfilepath」を保存する前に、テキスト ボックスが古い「sfilepath」で更新されていたため、ボックスに正しく入力できませんでした。

私は GUI の作成の初心者です (仕事用のプログラムを作成しましたが、私が辞めたら他の人が使用する必要があるため、先週の金曜日にそれを GUI に作成する方法を理解する必要があると決めました)。したがって、誰でも提供できるヘルプは大歓迎です。

4

1 に答える 1

2

必要なパターンは次のとおりです(ハンドラーをgfilebrowseに渡します):

w <- gwindow("test")
g <- ggroup(cont=w, horizontal=FALSE)
file_upload <- gfilebrowse(cont=g, handler=function(h,...) {
  svalue(e) <- svalue(h$obj)
})
e <- gedit("", cont=g)
于 2013-02-07T00:46:45.990 に答える