2013-05-30 11 views
5

これはおそらくとても簡単なのですが、答えが戻ってくると私はうんざりしますが、私は完全に困惑しています。私はマニュアルを試してみました。ウェブの検索を試みました。さまざまな例と私が考えることができる何か。私はまだ立ち往生しています。tcltk関数のデータを取得する

私はユーザーがRスクリプトの残りの部分で使用できる2つの値を追加するための簡単な入力を作成しようとしています。私はスクリプトを一時停止し、ユーザーからの入力を待ってから入力を取得すると(ファイル選択機能の仕組みなど)続行する必要があります。私はライブラリ(tcltk)を使うことにしました。私は関数内に素敵な小さなボックスを持っています。

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    print(x) 
    print(y) 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    } 

私が入力すると:ちょっといいボックスがポップアップし、私は私の入力値をすることができます

inputs() 

、この例の3と4を言います。

は、私はRコードの以降の部分でこれらの番号を使用したい

<Tcl> 
[1] 3 
[1] 4 

取り戻します。どのように私はそれらを取得するので、私はこれに相当することができますか?

input1 <- 3 
input2 <- 4 

ご協力いただきありがとうございます。

答えて

7

は、あなたの関数の変形例である:

inputs <- function(){ 

    xvar <- tclVar("") 
    yvar <- tclVar("") 

    tt <- tktoplevel() 
    tkwm.title(tt,"Input Numbers") 
    x.entry <- tkentry(tt, textvariable=xvar) 
    y.entry <- tkentry(tt, textvariable=yvar) 

    reset <- function() 
    { 
    tclvalue(xvar)<-"" 
    tclvalue(yvar)<-"" 
    } 

    reset.but <- tkbutton(tt, text="Reset", command=reset) 

    submit <- function() { 
    x <- as.numeric(tclvalue(xvar)) 
    y <- as.numeric(tclvalue(yvar)) 
    e <- parent.env(environment()) 
    e$x <- x 
    e$y <- y 
    tkdestroy(tt) 
    } 
    submit.but <- tkbutton(tt, text="submit", command=submit) 

    tkgrid(tklabel(tt,text="Enter Two Inputs"),columnspan=2) 
    tkgrid(tklabel(tt,text="Input1"), x.entry, pady = 10, padx =10) 
    tkgrid(tklabel(tt,text="Input2"), y.entry, pady = 10, padx =10) 
    tkgrid(submit.but, reset.but) 

    tkwait.window(tt) 
    return(c(x,y)) 
} 

今のような機能を実行します。今すぐあなたの2つの値を入力して「送信」をクリックし、その後、myvals変数を見て

myvals <- inputs() 

、あなたの2つの値が含まれています。

+0

ああ完璧!私の問題を修正しました。ありがとうございました!!! –

1

あなたは送信コールバックにそれらを持っています - あなたはそれらをどこかに置く必要があります。場合によっては、グローバル変数がこのために最適な場合もあります。 < < - を使用して、バインディングが送信コールバックのスコープ外で発生するように割り当てます。この目的のために環境を使用することも、参照クラスを使用することもできます。ここで

+1

ああ...ちょっとちょっとちょっと説明していただけますか? 「コールバックを送信する」とはどうすればよいですか<< –

関連する問題