Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > How to prevent Tkinter frame resize?

Reply
Thread Tools

How to prevent Tkinter frame resize?

 
 
phil_nospam_schmidt@yahoo.com
Guest
Posts: n/a
 
      04-22-2005
I am trying to prevent a user from resizing a frame beyond its
"natural" size as given by winfo_reqwidth and winfo_reqheight, without
any success. Can anyone make any suggestions, based on my code below?

Thanks!

from Tkinter import *

class Table(Frame):
def __init__(self, master,
rows=['row 1'], cols=['col 1'],
row_labels=True,
col_labels=True,
row_buttons=True,
col_buttons=True):
Frame.__init__(self, master)
self.rows = rows
self.cols = cols
self.row_labels = row_labels
self.col_labels = col_labels
self.row_buttons = row_buttons
self.col_buttons = col_buttons
self.col_width = 6
self.draw()
self.bind('<Configure>', self.changed)
def changed(self, ev):
w, h = self.winfo_reqwidth(), self.winfo_reqheight()
cfg = {}
if ev.height > h:
cfg['height'] = h
if ev.width > w:
cfg['width'] = w
if cfg:
self.config(**cfg) ######## this has no effect ########
def draw(self):
if self.row_labels or self.row_buttons:
col = 1
for t in self.cols:
if self.row_labels:
e = Entry(self, width=self.col_width,
relief=GROOVE)
e.insert(INSERT, t)
e.grid(row=0, column=col+1)
if self.row_buttons:
e = Label(self, text=col, width=self.col_width,
relief=GROOVE,bg='gray', fg='blue')
e.grid(row=1, column=col+1)
col += 1
if self.col_labels or self.col_buttons:
row = 1
for t in self.rows:
if self.col_labels:
e = Entry(self, width=15,
relief=GROOVE)
e.insert(INSERT, t)
e.grid(row=row+1, column=0)
if self.col_buttons:
e = Label(self, text=row, width=self.col_width,
relief=GROOVE,bg='gray', fg='blue')
e.grid(row=row+1, column=1)
row += 1


if __name__ == '__main__':
top = Tk()
cols = ['col %s' % i for i in range(5)]
rows = ['row %s' % i for i in range(5)]
s = Table(top, rows=rows, cols=cols)
s.pack(fill=BOTH, expand=1)
mainloop()

 
Reply With Quote
 
 
 
 
Martin Franklin
Guest
Posts: n/a
 
      04-22-2005
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> I am trying to prevent a user from resizing a frame beyond its
> "natural" size as given by winfo_reqwidth and winfo_reqheight, without
> any success. Can anyone make any suggestions, based on my code below?
>
> Thanks!
>
> from Tkinter import *
>
> class Table(Frame):
> def __init__(self, master,
> rows=['row 1'], cols=['col 1'],
> row_labels=True,
> col_labels=True,
> row_buttons=True,
> col_buttons=True):
> Frame.__init__(self, master)
> self.rows = rows
> self.cols = cols
> self.row_labels = row_labels
> self.col_labels = col_labels
> self.row_buttons = row_buttons
> self.col_buttons = col_buttons
> self.col_width = 6
> self.draw()
> self.bind('<Configure>', self.changed)
> def changed(self, ev):
> w, h = self.winfo_reqwidth(), self.winfo_reqheight()
> cfg = {}
> if ev.height > h:
> cfg['height'] = h
> if ev.width > w:
> cfg['width'] = w
> if cfg:
> self.config(**cfg) ######## this has no effect ########


I'm not sure I follow your code but this method is bound to the
<Configure> event *but* needs to return the string "break" so that it
does not pass that event on to the default event handler.



def changed(self, ev):
w, h = self.winfo_reqwidth(), self.winfo_reqheight()
cfg = {}
if ev.height > h:
cfg['height'] = h
if ev.width > w:
cfg['width'] = w
if cfg:
self.config(**cfg) ######## this has no effect ########
return "break"

This may do what you want.....

Cheers
Martin

 
Reply With Quote
 
 
 
 
phil_nospam_schmidt@yahoo.com
Guest
Posts: n/a
 
      04-22-2005
I've tried this, but it still doesn't work. At this point I suspect
that the problem is not with the resizing of the frame, but of the
toplevel widget in which the frame lives. I've been tinkering with
that, but still without success.

 
Reply With Quote
 
Jeff Epler
Guest
Posts: n/a
 
      04-22-2005
Use the wm_resizable method of the toplevel widget.
>>> from Tkinter import *; t = Tk(); t.wm_resizable(0,0); t.mainloop()


Jeff

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFCaVNMJd01MZaTXX0RAhxaAKCSR+h6qrlc8SKt3nWUGI HHlk9JrwCffrXw
HUnG2UnjDDASTq/6g9M1TNI=
=IVP0
-----END PGP SIGNATURE-----

 
Reply With Quote
 
phil_nospam_schmidt@yahoo.com
Guest
Posts: n/a
 
      04-22-2005
That's a useful tidbit of knowledge, but it doesn't quite get at what
I'm trying to do.

I want to allow a window to be resized, limited to some maximum size.
My approach was to use the <Configure> event to capture window resize
events. Then, if the new size is larger than the maximum, I would force
it back to the maximum size by reconfiguring the height and width of
the widget.

 
Reply With Quote
 
Markus Weihs
Guest
Posts: n/a
 
      04-22-2005
Hi!

I think what you want is maxsize():


from Tkinter import *

root = Tk()
root.maxsize(100,100)
root.mainloop()


Regards, Mark

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Question: How to Prevent Tkinter Menu from Taking Keyboard Focus galyle Python 6 10-04-2011 06:35 PM
Tkinter. Why the Need for a Frame, or no Frame? W. Watson Python 6 02-18-2008 10:53 AM
Prevent Tkinter Canvas from resizing Eric Wong Python 1 01-20-2006 07:07 AM
How do I prevent this from happening? (long text pushing out a fixed frame) Julia Briggs HTML 9 01-14-2004 08:54 PM



Advertisments