Dear list,
Has anyone perhaps managed to make some progress on the MainFrame widget in R (of the BWidget package of Tcl/Tk). The following post was made in April 2004(!) and I'm struggling with the same problem: I'd like a MainFrame widget with a menu and a parent tt (case #2 below), without it crashing when these are destroyed. I'd appreciate any ideas. Regards, Anthony #################### James Wettenhall wettenhall at wehi.edu.au Tue Apr 20 16:34:31 CEST 2004 ________________________________________ Enrique, Have a look at the BWidget demos that come with ActiveTcl. For your amusement, here are my efforts to totally confuse myself about the MainFrame widget. Does it require "." as a parent? What difference does having a menu make? Three cases below. (1) A MainFrame widget with no menu and with parent tt (2) A MainFrame widget with a menu and with parent tt (3) A MainFrame widget with a menu and with parent . (1) A MainFrame widget with no menu and with parent tt library(tcltk) tt <- tktoplevel() tclRequire("BWidget") mainFrame <- tkwidget(tt,"MainFrame") tkdestroy(mainFrame) # Optional tkdestroy(tt) # Notes: No problems with Case (1). :) (2) A MainFrame widget with a menu and with parent tt library(tcltk) tt <- tktoplevel() tclRequire("BWidget") exit <- function() { tkdestroy(mainFrame) tkdestroy(tt) } mainMenu <- paste("\"&File\" all file 0 ", "{{command \"E&xit\" {} \"Exit Case 2\" {}", "-command \"",.Tcl.callback(exit),"\"}}") mainFrame <- tkwidget(tt,"MainFrame",menu=mainMenu) tkpack(mainFrame) # Notes: Now I can crash my R session by typing # either of tkdestroy(tt) or tkdestroy(mainFrame) # or clicking "Exit" in the File menu. # The following DOESN'T crash my R session and # appears to destroy the menu (and frame?): tkcmd("MainFrame::_destroy",mainFrame) # But then tkdestroy(tt) still crashes my R session. # Now if instead of tkdestroy(tt), I click on the # close button at the top-right-hand corner of tt, # (after doing MainFrame::_destroy), I get this: Application Error Error: can't read "_widget(.1.1,top)": no such element in array can't read "_widget(.1.1,top)": no such element in array can't read "_widget(.1.1,top)": no such element in array while executing "$_widget($path,top) configure -menu {}" (procedure "MainFrame::_destroy" line 6) invoked from within "MainFrame::_destroy .1.1" (command bound to event) # Note that the menu option of BWidget::MainFrame is described # as "read-only". Is that a clue? (3) A MainFrame widget with a menu and with parent . library(tcltk) tkwm.deiconify(".") tclRequire("BWidget") exit <- function() { tkcmd("MainFrame::_destroy",mainFrame) tkwm.withdraw(".") } mainMenu <- paste("\"&File\" all file 0 ", "{{command \"E&xit\" {} \"Exit Case 3\" {}", "-command \"",.Tcl.callback(exit),"\"}}") mainFrame <- tkwidget(.TkRoot,"MainFrame",menu=mainMenu) tkpack(mainFrame) # Notes: Using the Tk root window "." is ugly # because if you destroy it then I think you have to # restart R or at least reload the tcltk package. The # exit function used here simply hides the "." # window. It doesn't really destroy anything. Well, maybe that will give others some clues in order to go further... Regards, James [[alternative HTML version deleted]] _______________________________________________ R-SIG-GUI mailing list R-SIG-GUI@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-gui