How to prevent Tkinter frame resize?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • phil_nospam_schmidt@yahoo.com

    #1

    How to prevent Tkinter frame resize?

    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=Tru e,
    col_buttons=Tru e):
    Frame.__init__( self, master)
    self.rows = rows
    self.cols = cols
    self.row_labels = row_labels
    self.col_labels = col_labels
    self.row_button s = row_buttons
    self.col_button s = col_buttons
    self.col_width = 6
    self.draw()
    self.bind('<Con figure>', self.changed)
    def changed(self, ev):
    w, h = self.winfo_reqw idth(), self.winfo_reqh eight()
    cfg = {}
    if ev.height > h:
    cfg['height'] = h
    if ev.width > w:
    cfg['width'] = w
    if cfg:
    self.config(**c fg) ######## this has no effect ########
    def draw(self):
    if self.row_labels or self.row_button s:
    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_button s:
    e = Label(self, text=col, width=self.col_ width,
    relief=GROOVE,b g='gray', fg='blue')
    e.grid(row=1, column=col+1)
    col += 1
    if self.col_labels or self.col_button s:
    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_button s:
    e = Label(self, text=row, width=self.col_ width,
    relief=GROOVE,b g='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=BOT H, expand=1)
    mainloop()

  • Martin Franklin

    #2
    Re: How to prevent Tkinter frame resize?

    phil_nospam_sch midt@yahoo.com wrote:[color=blue]
    > 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=Tru e,
    > col_buttons=Tru e):
    > Frame.__init__( self, master)
    > self.rows = rows
    > self.cols = cols
    > self.row_labels = row_labels
    > self.col_labels = col_labels
    > self.row_button s = row_buttons
    > self.col_button s = col_buttons
    > self.col_width = 6
    > self.draw()
    > self.bind('<Con figure>', self.changed)
    > def changed(self, ev):
    > w, h = self.winfo_reqw idth(), self.winfo_reqh eight()
    > cfg = {}
    > if ev.height > h:
    > cfg['height'] = h
    > if ev.width > w:
    > cfg['width'] = w
    > if cfg:
    > self.config(**c fg) ######## this has no effect ########[/color]

    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_reqw idth(), self.winfo_reqh eight()
    cfg = {}
    if ev.height > h:
    cfg['height'] = h
    if ev.width > w:
    cfg['width'] = w
    if cfg:
    self.config(**c fg) ######## this has no effect ########
    return "break"

    This may do what you want.....

    Cheers
    Martin

    Comment

    • phil_nospam_schmidt@yahoo.com

      #3
      Re: How to prevent Tkinter frame resize?

      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.

      Comment

      • Jeff Epler

        #4
        Re: How to prevent Tkinter frame resize?

        Use the wm_resizable method of the toplevel widget.[color=blue][color=green][color=darkred]
        >>> from Tkinter import *; t = Tk(); t.wm_resizable( 0,0); t.mainloop()[/color][/color][/color]

        Jeff

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

        iD8DBQFCaVNMJd0 1MZaTXX0RAhxaAK CSR+h6qrlc8SKt3 nWUGIHHlk9JrwCf frXw
        HUnG2UnjDDASTq/6g9M1TNI=
        =IVP0
        -----END PGP SIGNATURE-----

        Comment

        • phil_nospam_schmidt@yahoo.com

          #5
          Re: How to prevent Tkinter frame resize?

          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.

          Comment

          • Markus Weihs

            #6
            Re: How to prevent Tkinter frame resize?

            Hi!

            I think what you want is maxsize():


            from Tkinter import *

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


            Regards, Mark

            Comment

            Working...