tkinter- how to increase button's size repeatedly until reaching window's max size?

Viewed 45

My code should do the following:
Start button starts to increase its size by one pixel when clicked
When reached to the window's size, it returns to its initial size. Can't really do the last part

from tkinter import *
def increase():
    global counter, x, y
    x += 1
    y += 1
    b1.config(padx=x, pady=y)
    b1.after(100, increase)

root=Tk()
x=5
y=2
# buttons
b1=Button(root, text="Start", bg="blue",
          command=increase, width=x, height=y)
b1.place(x=10,y=10)
b2=Button(root, text="Stop",  command=quit)
b2.place(x=10, y=260)

root.geometry("320x300")
root.resizable(False, False)
root.mainloop()
3 Answers

Something like this ?

#!/usr/bin/python3

from tkinter import *
def increase():
    global counter, x, y, root
    x += 3
    y += 3
    window_height=root.winfo_height()
    window_width=root.winfo_width()
    if x >= window_height:
        x=0
    if y >= window_width:
        y=0
    b1.config(padx=x/3, pady=y/3)
    b1.after(100, increase)

root=Tk()
x=5
y=2
# buttons
b1=Button(root, text="Start", bg="blue",
          command=increase, width=x, height=y)
b1.place(x=10,y=10)
b2=Button(root, text="Stop",  command=quit)
b2.place(x=10, y=260)

root.geometry("320x300")
root.resizable(False, False)
root.mainloop()

There are some differences on the button size, if you use width/height or padx/pady. I tried adapting the offset for the padx/pady.

You can adapt this code using to your needs. It is not the best way to do it but it will do the work.

from tkinter import *

root = Tk()

count = 0


def reset_count():
    global count
    count = 0


def btn_size_changer():
    global count
    if count <= 21:
        if btn['width'] < 50 and btn['height'] < 40:
            btn['width'] += 2
            btn['height'] += 1
            root.after(100, btn_size_changer)
            count += 1
    else:
        if btn['width'] >= 7 and btn['height'] >= 3:
            btn['width'] -= 2
            btn['height'] -= 1
            root.after(100, btn_size_changer)
        else:
            reset_count()


btn = Button(root, text="Click ME", command=lambda: btn_size_changer(), width=6, height=3)
btn.pack(anchor=CENTER)


root.geometry('350x350')
root.mainloop()

It might be interesting to use the relx and rely parameter when you place your widgets.

relx and relx can be a value between 0 and 1. 1 ist 100% of the window size. 0 is 0% of the window size.

You could use that to set the size. It would not need to calculate if the windowsize is reached.

Related