2016-09-16 22 views
1

私はTclTkの例に従ってリストボックスを作成し、ユーザーが好みのフルーツを選択できるようにしました(下のコードを参照)。この例はユーザーの選択肢を表示し、それだけです。しかし、私はスクリプトの後半で、さまざまなことをするためにその選択肢を使いたい(プロットのタイトル、ファイル名などで使用する).TclTkのGUIから他のスクリプトにユーザの選択を戻すにはどうすればよいですか?TclTk GUIから変数を返すR

library(tcltk2) 

win1 <- tktoplevel() 
win1$env$lst <- tk2listbox(win1, height = 4, selectmode = "single") 
tkgrid(tk2label(win1, text = "What's your favorite fruit?", justify = "left"), 
padx = 10, pady =c(15, 5), sticky = "w") 
tkgrid(win1$env$lst, padx = 10, pady = c(5, 10)) 
fruits <- c("Apple", "Orange", "Banana", "Pear", "Apricot") 
for (fruit in fruits) 
    tkinsert(win1$env$lst, "end", fruit) 
# Default fruit is Banana. Indexing starts at zero. 
tkselection.set(win1$env$lst, 2) 

onOK <- function() { 
    fruitChoice <- fruits[as.numeric(tkcurselection(win1$env$lst)) + 1] 
    tkdestroy(win1) 
    msg <- paste0("Good choice! ", fruitChoice, "s are delicious!") 
    tkmessageBox(message = msg) 
} 
win1$env$butOK <-tk2button(win1, text = "OK", width = -6, command = onOK) 
tkgrid(win1$env$butOK, padx = 10, pady = c(5, 15)) 
+4

誰かがRでTclTkを使って何かを構築していることに本当に興奮していますが、あなたは[再現可能な例]を与える必要があります(http://stackoverflow.com/questions/5963269/how-to-make-a-great -r-reproducible-example)、または今までに何を得ているのか、あなたが使っているパッケージを調べてください。 – alistaire

+0

謝罪します。私が従っていた例のコードを追加しました。おかげさまで – jim616

答えて

0

リストボックスで使用できるコマンドパラメータがあります(作成に使用したパッケージを知る必要があります)。例えば、パラメータ「-selectcommand」が存在する。名前空間変数を設定して、選択した値にアクセスすることができます。

例:-selectioncommand {set :: xyz :: test}これはウィジェットを作成する際に使用する必要があります。

+0

私が使用していた例のコードを追加しました。 selectioncommandパラメータはどこで使用しますか? – jim616

+0

それはtclですか?私はこの形式に慣れていないので、リストボックスを作成するときに、 - > win1 $ env $ lst < - tk2listbox(win1、height = 4、selectmode = "single")を使用してみてください –

+0

これは、 Rのためのtcltk listboxをグーグルで探そう。あなたが提案した選択コマンドの使い方が不明です。私はtcltkや上記の例のフォーマットにコミットしていません。 tcltkにもっと適切なフォーマットがありますか? – jim616

0

TclTkのGUIから残りのスクリプトにユーザの選択を戻すにはどうすればよいですか?

これは、あなたが

オプション1何をしたいかによって異なります。あなたはR変数でGUIから選択した設定を抽出した後、それを破壊するもうGUIを必要としない場合

を。これはまさにonOK "イベントハンドラ"機能でやっていることです。

あなたは、この行の後にRのコードの実行を継続する前にクローズするtcltkウィンドウ を待つために、次のRコマンドを追加する必要があります:あなたはその後、R変数に値を使用することができ

# Wait for the window to be closed 
tkwait.window(win1) 

(イベントハンドラー関数のGUI設定から入力)をビジネスロジックeに追加します。 g。

choice <- tkmessageBox(message=paste("Do you want to buy", fruitChoice, "now?"), type = "yesno", icon="question") 

オプション2:

あなたのビジネスロジックは、(ウィンドウを閉じる/破壊することなく)イベントハンドラ関数に(実行)がトリガされ

にあなたのコードの末尾で、ビジネスロジックのコードを追加することにより、ビジネスロジックの出力(「状態変更」)を視覚化します。

このGUI駆動型のパラダイムでは、tkdestroyを呼び出さずにビジネスロジックコードを直接イベントハンドラ関数に追加します。

ウィンドウを閉じるには、「終了」、「閉じる」、「キャンセル」ボタンを追加します。これらのボタンのイベントハンドラ機能では、tkdestroyを呼び出します。

関連する問題