2016-04-25 7 views
0

小さなウィジェットを開発して、ダイアログボックスに数字を入力して後で使用するためにその番号をワークスペースに保存することを試みていますが、ウィジェットに入力された後に入力されたテキストを検索するのに問題があります。私はあるウィジェットから別のウィジェットへ情報を渡す方法についていくつかのスレッドを見つけましたが、ワークスペースには戻っていません。私が動作させる唯一の方法は、コードを2番目の最後の行に実行し、最後の行を別々に手動で実行することです。誰も私を喜ばせることができますか?R内のgedit入力をRstudioワークスペースに出力するには

# clearing workspace 
rm(list = ls()) 

# Loading packages 
library(gWidgets) 
library(gWidgetstcltk) 

# Setting up Widget 
win=gwindow(title='Experiment setup',visible = TRUE) 
grp_name <- ggroup(container = win) 
okbut<-ggroup(container = win) 
lbl_data_frame_name <- glabel(
    'Choose number of indexing variables: ', 
    container = grp_name 
) 
#Asking user for input 
obj<-gedit(container=grp_name,handler=function(h,..){ 
    print(as.integer(svalue(h$obj))) 
    }, action = dispose(win)) 
#Attempt to return text from user input to workspace 
textfromgedit=svalue(obj) 
+0

このスクリプトをファイルとして保存する必要があると思われます。 'script.R'を実行し、' source( "script.R") 'でファイルを呼び出します。それがトリックですか? – CephBirk

+0

私はあなたが 'ginput'を探していると思います。この 'gedit'を' dispose(win) 'アクションで使用するのは正しいことではありません。ハンドラ中にウィンドウをクリアするには、そのハンドラをハンドラに追加し、その値をハンドラ内に保存します。そのためには、別の環境に割り当てる必要があります。このタスクは、通常、 '<< - 'で実行されます。 – jverzani

+0

ありがとう、私は両方を試みた。別のスクリプトで使用すると、入力テキストが変数としてワークスペースに出力されず、ginputは機能しましたが、元のコンテナにginputウィンドウを埋め込むことができませんでした。これは最終的に1つのコンテナ内の入力ウィンドウのサブセットになるので、これを実行したいと思います。私はginputの "親"または "ウィジェット"オプションをコンテナ(この場合はgrp_name)として設定し、ginputを埋め込むと思ったが、そうではなかった。何か案は?ご協力いただきありがとうございます。その多くの評価!!!! –

答えて

0

このようなことがありますか?いくつかのトリックなし

library(gWidgets2) results <- new.env() win <- gwindow("Save number") gp <- gformlayout(container=win) gedit("", container=gp, label="Number of variables", coerce.with=as.numeric, handler=function(h,...) { results$values <- svalue(h$obj) })

、ハンドラ内の割り当ては、プログラムの残りの部分に表示されていない範囲に割り当てます。上記では、割り当てに環境が使用されています。代入演算子は<<-でも可能です。

また、ウィジェットをよりうまく整理するためにgformlayoutを使用しました。それはgWidgets2で利用できます。古いgWidgetsの代わりに使用することをお勧めします。

関連する問題