[R] tcltk, X11 protocol error: Bug?

John Fox jfox at mcmaster.ca
Thu Sep 8 13:44:20 CEST 2005


Dear Nicholas,

This problem has been reported before (enter "X11 protocol error" on the R
site search at http://finzi.psych.upenn.edu/search.html to see the previous
threads), but as far as I know, there's no definitive explanation or
solution. As well, things appear to work fine, despite the warnings. The way
I handle the problem in the Rcmdr package is simply to intercept the
warnings.

I hope this helps,
 John 

--------------------------------
John Fox
Department of Sociology
McMaster University
Hamilton, Ontario
Canada L8S 4M4
905-525-9140x23604
http://socserv.mcmaster.ca/jfox 
-------------------------------- 

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch 
> [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of 
> Nicholas Lewin-Koh
> Sent: Monday, September 05, 2005 5:16 PM
> To: r-help at r-project.org
> Subject: [R] tcltk, X11 protocol error: Bug?
> 
> Hi,
> I am having trouble debugging this one. The code is attached 
> below, but it seems to be a problem at the C-tk interface. If 
> I run this 1 time there are no problems if I run it more than 
> once I start to get warnings that increase in multiples of 11 
> everytime I run it. Here is a sample session
> 
> 
> > source("clrramp2.r")
> Loading required package: tcltk
> Loading Tcl/Tk interface ... done
> > clrRamp()
> >
> > tt<-clrRamp()
> > tt
> function (n)
> {
>     x <- ramp(seq(0, 1, length = n))
>     rgb(x[, 1], x[, 2], x[, 3], max = 255) }
> <environment: 0x8b8674c>
> > image(matrix(1:10),col=tt(10))
> > tt<-clrRamp()
> There were 22 warnings (use warnings() to see them)
> > image(matrix(1:10),col=tt(10))
> There were 11 warnings (use warnings() to see them)
> > warnings()
> Warning messages:
> 1: X11 protocol error: BadWindow (invalid Window parameter)
> 2: X11 protocol error: BadWindow (invalid Window parameter)
> 3: X11 protocol error: BadWindow (invalid Window parameter)
> 4: X11 protocol error: BadWindow (invalid Window parameter)
> 5: X11 protocol error: BadWindow (invalid Window parameter)
> 6: X11 protocol error: BadWindow (invalid Window parameter)
> 7: X11 protocol error: BadWindow (invalid Window parameter)
> 8: X11 protocol error: BadWindow (invalid Window parameter)
> 9: X11 protocol error: BadWindow (invalid Window parameter)
> 10: X11 protocol error: BadWindow (invalid Window parameter)
> 11: X11 protocol error: BadWindow (invalid Window parameter)
> 
> I am running R-2.1.1 on ubuntu linux 5.04, compiled from 
> source (not the deb package).
> My version of tcl/tk is 8.4. The code is below. If anyone 
> sees something I am doing foolish let me know, otherwise I 
> will file a bug report.
> 
> Nicholas
> 
> ##### File clrramp2.r ##############
> 
> require(tcltk)
> clrRamp <- function(n.col, b.color=NULL,e.color=NULL){
> 
>   B.ChangeColor <- function()
>     {
>  
>       b.color <<- 
> tclvalue(tkcmd("tk_chooseColor",initialcolor=e.color,
>                                  title="Choose a color"))
>       if (nchar(b.color)>0){
>         tkconfigure(canvas.b,bg=b.color)
>         Rmp.Draw()
>       }
>     }
> 
>   E.ChangeColor <- function()
>     {
>  
>       e.color <<- 
> tclvalue(tkcmd("tk_chooseColor",initialcolor=e.color,
>                                  title="Choose a color"))
>       ##cat(e.color)
>       if (nchar(e.color)>0){
>         tkconfigure(canvas.e,bg=e.color)
>         Rmp.Draw()
>       }
>     }
> 
>   Rmp.Draw <-function(){
>     
> cr<<-colorRampPalette(c(b.color,e.color),space="Lab",interpola
> te="spline")
>     rmpcol <- cr(n.col)
>     #rmpcol<-rgb( rmpcol[,1],rmpcol[,2],rmpcol[,3])
>     inc <- 300/n.col
>     xl <- 0
>     for(i in 1:n.col){
>       ##item <- 
>       
> tkitemconfigure(canvas.r,barlst[[i]],fill=rmpcol[i],outline=rmpcol[i])
>       #xl <- xl+inc
>     }
>   }
> 
>   save.ramp <- function(){
>     
> cr<<-colorRampPalette(c(b.color,e.color),space="Lab",interpola
> te="spline")
>     tkdestroy(tt)
>     ##invisible(cr)
>   }
> 
>   tt <- tktoplevel()
>   tkwm.title(tt,"Color Ramp Tool")
>   frame <- tkframe(tt)
>   bframe <- tkframe(frame,relief="groove",borderwidth=1)
> 
>   if(is.null(b.color)) b.color <- "blue"
>   if(is.null(e.color)) e.color <- "yellow"
>   if(missing(n.col)) n.col <- 100
> 
>   canvas.b <- tkcanvas(bframe,width="50",height="25",bg=b.color)
>   canvas.e <- tkcanvas(bframe,width="50",height="25",bg=e.color)
>   canvas.r <- tkcanvas(tt,width="300",height="50",bg="white")
>   
>   BColor.button <- tkbutton(bframe,text="Begin
>   Color",command=B.ChangeColor)
>   ##tkgrid(canvas.b,BColor.button)
>   EColor.button <- tkbutton(bframe,text="End
>   Color",command=E.ChangeColor)
>   killbutton <- tkbutton(bframe,text="Save",command=save.ramp)
>   tkgrid(canvas.b,BColor.button,canvas.e,EColor.button)
>   tkgrid(bframe)
>   tkgrid(frame)
>   tkgrid(canvas.r)
>   tkgrid(killbutton)
> 
>   
> cr<-colorRampPalette(c(b.color,e.color),space="Lab",interpolat
> e="spline")
>   ##rmpcol <- hex(mixcolor(alpha,bc,ec,where="LUV"))
>   rmpcol <- cr(n.col)
>   inc <- 300/n.col
>   xl <- 0
>   #barlst <- vector(length=n.col,mode="list")
>   barlst <- tclArray()
>   for(i in 1:n.col){
>     item<-tkcreate(canvas.r,"rect",xl,0,xl+inc,50,
>                    fill=rmpcol[i],outline=rmpcol[i])
>     ##tkaddtag(canvas.r, "point", "withtag", item)
>     barlst[[i]]<-item
>     xl <- xl+inc
>   }
>   tkgrab.set(tt)
>   tkwait.window(tt)
> 
>   ##tkdestroy(tt)
>   invisible(cr)
> }
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html




More information about the R-help mailing list