2016-08-31 2 views
-3

R에서 그래픽 요소를 업데이트하는 데 문제가 있습니다. 알아낼 수 없습니다. 나는 조금 밀어 주시면 고맙겠습니다.R의 gWidgets 요소 업데이트

몇 가지 옵션으로 미리 채워진 간단한 GUI를 만들려고하지만 버튼을 누르면 데이터베이스가 쿼리되고 (GUI가 쿼리를 수정 함) 결과에서 gcomboboxes 및 gtables. 나는 솔직히 R에서 그러한 훌륭한 환경을 만드는 것이 얼마나 간단한 지 놀라 울뿐입니다.

gcomboboxes 또는 gtables의 본문을 화면에 수정하면 믿을 수 없습니다 (가능한 경우 그럴 수 있습니다. 내 선호하는 솔루션). 나는 또한 내가 글레이 아웃의 개별 요소들을 파괴 할 수 있다고 믿지 않으며 전체 글레이 아웃 만 파괴 할 수있다. 그러나 나는 그것을 올바른 순서로 어떻게 되돌려 놓을 수 있습니까?

# Small example for GUI element creation and destruction 

if(!require("RGtk2")) {library("RGtk2")} 
if(!require("digest")) {library("digest")} 
if(!require("cairoDevice")) {library("cairoDevice")} 
if(!require("gWidgets")) {library("gWidgets")} 
if(!require("gWidgetsRGtk2")) {library("gWidgetsRGtk2")} 

nw<-gwindow("Test",toolkit=guiToolkit("RGtk2")) 
g<-ggroup(horizontal=FALSE,cont=nw) 
t1<-glayout(container=g) # Header 
t2<-glayout(container=g) # Dynamic middle 
t3<-glayout(container=g) # Footer 
t1[1,1]<-gcombobox(c("foo","bar")) 
t1[1,2]<-gbutton("Update") 
t2[1,1]<-gframe("",container=t2) 
t2[2,1]<-gcombobox(c("violin","metal")) 
t2[3,1]<-gtable(c("YoYoMa","Metallica")) 
t3[1,1]<-glabel("Filler text",container=t3) 

delete(g,t2) # Unable to delete t2[2,1] and t2[3,1] 
t2<-glayout(container=g) 
#t2[2,1]<-gcombobox(c("violin","metal","pop")) ### Nope... 
#t2[3,1]<-gtable(c("YoYoMa","Metallica","UB40")) 
#add(t2,gcombobox(c("violin","metal","pop"))) ### Nope... 
#add(t2,gtable(c("YoYoMa","Metallica","UB40"))) 

내 모든 추가 된 요소는 내 꼬리말 텍스트 아래에 있습니다. 머리말과 꼬리말 사이에 들어가려면 어떻게해야합니까?

글라이 아웃을 삭제하지 않으면 gcombobox의 내용을 수정할 수있는 것처럼 보이지만 실제로 UI에 반영되지 않습니다. 화살표를 클릭하면 새 텍스트를 볼 수 있지만 선택 영역이 더 이상 변경되지 않습니다.

... 
t2[2,1]<-gcombobox(c("text to remove","violin","metal")) 
t2[3,1]<-gtable(c("YoYoMa","Metallica")) 
t3[1,1]<-glabel("Filler text",container=t3) 

t2[2,1]<-gcombobox(c("violin","metal","pop")) # "text to remove" remains selected regardless of user input 
t2[3,1]<-gtable(c("YoYoMa","Metallica","UB40")) 

다소 실망 스럽지만 이것은 나에게 잘 맞습니다. 다른 사람들이 문제가 생길 경우를 대비하여이 해결책을 남겨 두겠습니다. GUI 요소의 생성과 파괴

if(!require("RGtk2")) {library("RGtk2")} 
if(!require("digest")) {library("digest")} 
if(!require("cairoDevice")) {library("cairoDevice")} 
if(!require("gWidgets")) {library("gWidgets")} 
if(!require("gWidgetsRGtk2")) {library("gWidgetsRGtk2")} 

nw<-gwindow("Test",toolkit=guiToolkit("RGtk2")) 
g<-ggroup(horizontal=FALSE,cont=nw) 
t1<-glayout(container=g) # Header 
t2<-glayout(container=g) # Dynamic middle 
t3<-glayout(container=g) # Footer 
t1[1,1]<-gcombobox(c("foo","bar")) 
t1[1,2]<-gbutton("Update") 
t2[1,1]<-gframe("",container=t2) 
t2[2,1]<-gcombobox(c("text to remove","violin","metal")) 
t2[3,1]<-gtable(c("YoYoMa","Metallica")) 
t2[3,1]<-gtable(BandList) 
t3[1,1]<-glabel("Filler text",container=t3) 

t2[2,1][]<-c("violin","metal","pop") 
svalue(t2[2,1])<-"pop" #otherwise it's confused about defaults 
t2[3,1][]<-c("YoYoMa","Metallica","UB40") 
+0

나는 4 시간의 인터넷 검색과 실험을하고 있습니다. 나는 내가 아마추어임을 인정하지만, 사람들이 저를 downvoting하면 내가 찾는 조건으로 나를 도울 수 있습니까? – chrysrobyn

+0

몇 가지. 먼저,'gWidgets'가 아닌'gWidgets2'를 사용하십시오. (버그는 더 쉽게 해결할 수 있습니다). 둘째, 위젯의 내용을 업데이트하여 사용자가 컨트롤이 어디에 있는지에 대한 느낌을 재조정 할 필요가 없도록 할 수 있습니다. 적절하게'[<-'method os'svalue <-'를 사용하십시오. 셋째, 위젯을 숨기려면'visible' 속성을'FALSE'로 조정하면됩니다. 그렇지 않으면, 나는'delete'라고 생각하고'[<-'를 통해 덧붙여 야합니다. – jverzani

답변

0

에 대한 # 작은 예를 들어 내가 화면 요소를 제거 할 필요없이 화면에 이미 내용을 편집 할 수있는 방법을 발견했다.

# Small example for GUI element creation and destruction 

if(!require("RGtk2")) {library("RGtk2")} 
if(!require("digest")) {library("digest")} 
if(!require("cairoDevice")) {library("cairoDevice")} 
if(!require("gWidgets")) {library("gWidgets")} 
if(!require("gWidgetsRGtk2")) {library("gWidgetsRGtk2")} 

nw<-gwindow("Test",toolkit=guiToolkit("RGtk2")) 
g<-ggroup(horizontal=FALSE,cont=nw) 
t1<-glayout(container=g) # Header 
t2<-glayout(container=g) # Dynamic middle 
t3<-glayout(container=g) # Footer 
t1[1,1]<-gcombobox(c("foo","bar")) 
t1[1,2]<-gbutton("Update") 
t2[1,1]<-gframe("",container=t2) 
t2[2,1]<-gcombobox(c("text to remove","violin","metal")) 
t2[3,1]<-gtable(c("YoYoMa","Metallica")) 
t2[3,1]<-gtable(BandList) 
t3[1,1]<-glabel("Filler text",container=t3) 

t2[2,1][]<-c("violin","metal","pop") 
svalue(t2[2,1])<-"pop" #otherwise it's confused about defaults 
t2[3,1][]<-c("YoYoMa","Metallica","UB40")