[R] Need suggestions about GUI

ronggui ronggui.huang at gmail.com
Thu Jan 24 02:51:55 CET 2008


Thanks. I played around yesterday and found out the way.

##  gWidgetsRGtk2
### translate the selected index back to pointer
### require(gWidgetsRGtk2)
#a<-gtext(cont=T)
#svalue(a)<-"abcde"
#buffer =a at widget@widget$GetBuffer() # get the buffer

require(RGtk2)
win<-gtkWindow()
win$add(g<-gtkTextView())

textbuffer <- g$GetBuffer()
textbuffer$SetText("insert text") ## insert text

buffer<-g$GetBuffer() # get the buffer
####### select "text"
bounds = buffer$GetSelectionBounds() # selected bound

start = bounds$start # start and end iter
end = bounds$end

buffer$GetText(start,end) #get selected text

s1<-gtkTextIterGetOffset(start) # translate iter pointer to number
e1<-gtkTextIterGetOffset(end)

s2<-gtkTextBufferGetIterAtOffset(buffer,s1) # translate number back to iter
e2<-gtkTextBufferGetIterAtOffset(buffer,e1)
## unselect
buffer$GetText(s2$iter,e2$iter) # retrevieve the selected text

buffer$createTag("red.foreground",foreground = "red")
buffer$ApplyTagByName("red.foreground",start,end) ## change colors

buffer$createTag("blue.foreground",foreground = "blue")
buffer$ApplyTagByName("blue.foreground",start,end) ## change colors again


2008/1/24, Michael Lawrence <lawremi at iastate.edu>:
> On Jan 22, 2008 6:41 AM, ronggui <ronggui.huang at gmail.com> wrote:
> > Thanks, John,
> > Here is some code to show what I want to do. BTW, it seems there is a
> > bug in svalue in gWidgetstcltk for gtext when using the drop=T
> > argument.
> >
> > getsel <-  function(obj, toolkit, ...) {
> > ### get the selected text from gtext
> > getWidget <- gWidgetstcltk:::getWidget
> > if(tclvalue(tktag.ranges(getWidget(obj),"sel")) != "")
> > ### notice
> > ### gWidgetstcltk's _svalue(drop=T)_ has bug. should add tclvalue to
> > the above line.
> > {                val = tclvalue(tkget(getWidget(obj),"sel.first","sel.last"))}
> >     else  val =""#tclvalue(tkget(getWidget(obj),"0.0","end"))
> >             val = unlist(strsplit(val,"\n"))
> >             return(val)
> >           }
> >
> > get_index <-  function(obj, toolkit, ...) {
> > ### get the selected text from gtext, return the index instead of text.
> > getWidget <- gWidgetstcltk:::getWidget
> > if(tclvalue(tktag.ranges(getWidget(obj),"sel")) != ""){
> >                 val = strsplit(tclvalue(tktag.ranges(getWidget(obj),
> > "sel")), " ")[[1]]}
> >     else  val =c(0,0)
> >             return(as.numeric(val))
> >           }
> >
> >
> > require(gWidgets)
> >
> > #initial parameters, storing the relavant information
> > freecodes <- c("node1","node2")
> > n_coding <- 0
> > node <- character(10000)
> > chunk <- character(10000)
> > begin <- numeric(10000)
> > end <- numeric(10000)
> > imported_file <- readLines(file.path(R.home(),"COPYING"))
> >
> > codepanel <- gpanedgroup(container=gwindow("Code bar"), horizontal = FALSE)
> > addcode = gdroplist(freecodes,0,container=codepanel,editable=TRUE)
> >
> > addcodebutton <- gbutton("Add new
> > code",container=codepanel,handler=function(...) {
> >                         if(svalue(addcode)!="")
> > addcode[length(addcode)+1]<-svalue(addcode)
> > }
> > )
> > ## allow the user to change the extant codes -- related to "freecodes" parameter
> >
> > updatecodes <- gbutton("Update
> > Codes",container=codepanel,handler=function(...)
> > assign("freecodes",addcode[seq_len(length(addcode))],pos=1))
> > ## get the items in gdroplist, and push it to variable "freecodes"
> >
> > coding <- gbutton("      Coding      ",container=codepanel,handler=
> > function(...){
> > if (svalue(addcode)!="" && sel!=""){
> > sel <<- paste(getsel(ed),collapse="\n")
> > sel_index <<- get_index(ed)
> > n_coding <<- n_coding + 1
> > node[n_coding] <<- svalue(addcode)
> > chunk[n_coding] <<- sel
> > begin[n_coding] <<- sel_index[1]
> > end[n_coding] <<- sel_index[2]
> > }}
> > )
> > ## coding: get seleted text from gtext and link it to specific code/node.
> >
> > ed <- gtext(con=T,width=500) # gtext
> > svalue(ed) <- imported_file # push it file to gtext
> >
> > # steps to using this "toy":
> >
> > 1, enter new code names into the droplist box, for example node3, then
> > click "add new code"
> > 2, select specific code, for example node2.
> > 3, select text chunk in the gtext, and click coding. repeat step 3 in
> > coding process.
> > 4, We can see what's been coded by inpecting variable of "node","chunk".
> >
> > What I don't know how to do:
> > 1, When I select specific code, and click some button (for example
> > highligh), all the text chunk related to that code will be highlighted
> > (through color or font style etc.)
>
> John might correct me, but I don't think that gWidgets supports this
> level of markup. You might try using tcltk or RGtk2 directly (eg the
> GtkTextView and GtkTextBuffer classes). It would be easy to get the
> index of a selection in the buffer. See the function
> gtkTextBufferGetSelectionBounds() in RGtk2.
>
> > 2, I would like to arganize the codes like a tree. The code tree and
> > reorganized by drag and drop.
> > 3, In the coding buttong, how can I avoid using <<- in handler function.
> >
> >
> > 2008/1/22, j verzani <jverzani at gmail.com>:
> >
> > > ronggui <ronggui.huang <at> gmail.com> writes:
> > >
> > > > Thanks.
> > > >
> > > > gWidgets is quite good. However, I want to get the selection text chunk as
> > > > well as the index, but the index arguments does not work for gtext.
> > > >
> > > > > obj<-gtext(cont=T)
> > > > > svalue(obj,drop=T)
> > > > [1] "cde"
> > > > > svalue(obj,drop=T,index=T)
> > > > [1] "cde"
> > > >
> > >
> > >
> > >
> > > The svalue method has the index argument for the widgets where you might want to
> > > return the  index or value such with a radio button group or combobox. For
> > > gtext, the drop argument when TRUE returns just the text selected by the mouse,
> > > otherwise the entire text buffer is returned.
> > >
> > > library(gWidgets)
> > > options("guiToolkit"="RGtk2")
> > > obj = gtext("sadfsad",cont=T)
> > > svalue(obj)   ## returns: "sadfsad\n"
> > > svalue(obj,drop=TRUE)  ## returns  ""
> > > ## now highlight some text
> > > svalue(obj,drop=TRUE) ## returns "dfsa"
> > >
> > > If you want to email me a bit more detail as to what you are trying to do, I can
> > > let you know if gWidgets can work for you.
> > >
> > > --John
> > > >
> > >
> > > > 2008/1/21, Gabor Grothendieck <ggrothendieck <at> gmail.com>:
> > > > >
> > > > > You can find examples of using tcltk here:
> > > > >
> > > > > http://www.sciviews.org/_rgui/tcltk/
> > > > >
> > > > > Also the gwidgets package is a toolkit independent
> > > > > layer that can run on top of tcltk or RGtk and it is described
> > > > > with many examples here:
> > > > >
> > > > > http://wiener.math.csi.cuny.edu/pmg/gWidgets
> > > > >
> > > > > On Jan 21, 2008 4:02 AM, ronggui <ronggui.huang <at> gmail.com> wrote:
> > > > > > What I want to do is:
> > > > > > 1, creat a text box, insert text into that box.
> > > > > > 2, select chunk of of the text by mouse, and link it to a lable. so I
> > > > > would
> > > > > > like a way to get that chunk of text.
> > > > > >
> > > > > > Can I do such job with tcltk?  Any relavant tutorial materials?
> > > > > >
> > > > > > Thanks
> > > > > >
> > > > > > --
> > > > > > HUANG Ronggui
> > > > > >
> > > > > > Bachelor of Social Work, Fudan University, China
> > > > > >
> > > > > > Master of sociology, Fudan University, China
> > > > > >
> > > > > > Ph.D. Student , CityU of HK,
> > > > > >
> > > > > http://www.cityu.edu.hk/sa/psa_web2006/students/rdegree/huangronggui.html
> > > > > >
> > > > > >        [[alternative HTML version deleted]]
> > > > > >
> > > > > > ______________________________________________
> > > > > > R-help <at> r-project.org mailing list
> > > > > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > > > > PLEASE do read the posting guide
> > > > > http://www.R-project.org/posting-guide.html
> > > > > > and provide commented, minimal, self-contained, reproducible code.
> > > > > >
> > > > >
> > > >
> > >
> > > ______________________________________________
> > > R-help at r-project.org mailing list
> > > https://stat.ethz.ch/mailman/listinfo/r-help
> > > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > > and provide commented, minimal, self-contained, reproducible code.
> > >
> >
> >
> >
> > --
> > HUANG Ronggui
> >
> > Bachelor of Social Work, Fudan University, China
> >
> > Master of sociology, Fudan University, China
> >
> > Ph.D. Student , CityU of HK,
> > http://www.cityu.edu.hk/sa/psa_web2006/students/rdegree/huangronggui.html
> >
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>


-- 
HUANG Ronggui

Bachelor of Social Work, Fudan University, China

Master of sociology, Fudan University, China

Ph.D. Student , CityU of HK,
http://www.cityu.edu.hk/sa/psa_web2006/students/rdegree/huangronggui.html



More information about the R-help mailing list