I've been able to figure out on my own how to do what I need in the largely undocumented tcltk package, but I've finally hit a wall. I can't even think of any sufficiently specific search terms to use for this. I'm trying to make the widgets in my tk window resize when the window is resized by clicking and dragging on its corners or edges. Instead they stay exactly where they are, and parts of them get cut off when the window is made smaller and reveal large empty spaces when the windows is made bigger. Looks terrible. I've tried doing tkconfig(mywidget,sticky='news') and all that does is stretch the widget out to the original window dimensions, but this doesn't help at all when the window is resized. From reading the TclTK documentation, it seems like the 'rowconfigure' and 'columnconfigure' methods of the grid are supposed to solve this problem by setting the 'weight' grid option. There exists a tkgrid.rowconfigure() command and the following invocation did not produce any errors... tkgrid.rowconfigure(mywidget,0,weight=1) ...but it didn't make the widget dynamically resize with the parent window either. Either I'm invoking it incorrectly, or it doesn't actually do what I think it does. Rather than posting my lengthy and complicated code, I'll post this example instead from bioinf.wehi.edu.au/~wettenhall/RTclTkExamples/ (a very helpful site without which I would never have been able to use the tcltk package at all). require(tcltk) tt<- tktoplevel() xscr<- tkscrollbar(tt, repeatinterval=5,orient="horizontal", command=function(...)tkxview(txt,...)) yscr<- tkscrollbar(tt, repeatinterval=5, command=function(...)tkyview(txt,...)) txt<- tktext(tt,bg="white",font="courier", xscrollcommand=function(...)tkset(xscr,...),yscrollcommand=function(...)tkset(yscr,...), wrap="none") tkgrid(txt,yscr) tkgrid(xscr) tkgrid.configure(yscr,sticky="ns") tkgrid.configure(xscr,sticky="ew") for (i in (1:100)) tkinsert(txt,"end",paste(i,"^ 2 =",i*i,", ")) tkconfigure(txt, state="disabled") tkfocus(txt) This creates a scrollable text window, and it suffers from exactly the problem I described above. My question is: what needs to be changed in order to make the tktext widget and its scrollbars automatically resize with the parent window? Thank you. [[alternative HTML version deleted]]
On 07/21/2010 09:36 AM, Alex Bokov wrote:> I've been able to figure out on my own how to do what I need in the > largely undocumented tcltk package, but I've finally hit a wall. I > can't even think of any sufficiently specific search terms to use for > this.Oops. Murphy's Law-- the answer only comes to you after you already send off an email to the experts. Sorry to bother you, I figured it out already. Here's how to make the code example I posted earlier...> require(tcltk) > tt<- tktoplevel() > xscr<- tkscrollbar(tt, repeatinterval=5,orient="horizontal", > command=function(...)tkxview(txt,...)) > yscr<- tkscrollbar(tt, repeatinterval=5, > command=function(...)tkyview(txt,...)) > txt<- tktext(tt,bg="white",font="courier", > xscrollcommand=function(...)tkset(xscr,...),yscrollcommand=function(...)tkset(yscr,...), > wrap="none") > tkgrid(txt,yscr) > tkgrid(xscr) > tkgrid.configure(yscr,sticky="ns") > tkgrid.configure(xscr,sticky="ew") > for (i in (1:100)) tkinsert(txt,"end",paste(i,"^ 2 =",i*i,", ")) > tkconfigure(txt, state="disabled") > tkfocus(txt) >...resize dynamically. All I had to do was add the following lines to the end of it: tkgrid.columnconfigure(tt,0,weight=1) tkgrid.rowconfigure(tt,0,weight=1) tkgrid.rowconfigure(txt,0,weight=1) tkgrid.columnconfigure(txt,0,weight=1) tkgrid.configure(txt,sticky='nswe') I had been so close before, I just didn't realize that if you have a complicated frame structure enclosing the widget, then the weight needs to be set on every enclosing frame, not just the widget itself. The hard part is figuring out which row and column a column-spanning widget really belongs to-- so far it seems to belong to the left-most and top-most one. Anyway, thanks to anybody who was going to answer this, hopefully I'm sending this soon enough to save you the effort of composing a reply. Have a great day! [[alternative HTML version deleted]]