[R] tcltk problem

peter dalgaard pdalgd at gmail.com
Thu Mar 12 09:04:48 CET 2015


> On 11 Mar 2015, at 23:41 , Erich Neuwirth <erich.neuwirth at univie.ac.at> wrote:
> 
> OSX 10.10.2
> R 3.1.3
> XQuartz installed.
> 
> I am trying to run one of the tcltk demos

Which demos? Doesn't look like any the ones in the package. 

(Please at least be specific when you imply that someone is publishing bad code.)

> This one works:
> 
> tt <- tktoplevel()
> label.widget <- tklabel(tt, text = "Hello, World!")
> button.widget <- tkbutton(tt, text = "Push",
>                          command = function()cat("OW!\n"))
> tkpack(label.widget, button.widget) # geometry manager
>                                    # see Tk-commands
> 
> 
> But the next one breaks:
>> if(as.character(tcl("info", "tclversion")) >= "8.5") {
> +   # make use of themed widgets
> +   # list themes
> +   as.character(tcl("ttk::style", "theme", "names"))
> +   # select a theme -- here pre-XP windows
> +   tcl("ttk::style", "theme use", "winnative")
> + } else {
> +   # use Tk 8.0 widgets
> + }
> Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") :
>  [tcl] bad command "theme use": must be configure, map, lookup, layout, theme, or element.
> 
> What is going wrong here?

Presumably "theme use" wants to be "theme", "use".

(Many moons ago, tcl() just pasted words together and executed the result as a Tcl command via .Tcl. Looks like the author expected .Tcl("ttk::style theme use winnative"), but nowadays it uses .Tcl.objv() which expects a vector of Tcl words so there is a difference between two words and one word with a space in the middle. The puzzling bit is that I'd have thunk Tcl 8.5 to be considerably later than the change to tcl()?)


-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Email: pd.mes at cbs.dk  Priv: PDalgd at gmail.com



More information about the R-help mailing list