Problem resizing a window and button placement

Steve GS Gronicus at SGA.Ninja
Mon Feb 26 06:02:59 EST 2024


Although your code produces the value of Ww outside the function, I do not see how I can use the value of Ww unless I close the program.

import tkinter as tk

Ww = None  # What does this do? Why not Integer?
WwZ = None

def on_configure(*args):
        global Ww
        global WwZ
        Ww = root.winfo_width()
        print("9  Ww Inside =<"+str(Ww)+">")  # works
        WwZ = Ww * 2
        print("11  WwZ Inside =<"+str(WwZ)+">")  # works
        return(Ww)  #Can I use this?
        
root = tk.Tk()
root.bind('<Configure>',on_configure)
print("15  Ww Inside1 = <"+str(Ww)+">")
#Ww2 = int(Ww) * 2  # fails
print("17  WwZ Inside2 = <"+str(WwZ)+">")

root.mainloop()

Ww2 = int(Ww) * 2  #Works but only after the program stops
print("21  Ww Outside2 = <"+str(WwZ)+">")
# Can I have concentric loops?


SGA

-----Original Message-----
From: Alan Gauld <learn2program at gmail.com> 
Sent: Monday, February 26, 2024 4:04 AM
To: Steve GS <Gronicus at SGA.Ninja>; python-list at python.org
Subject: Re: RE: Problem resizing a window and button placement

On 26/02/2024 07:56, Steve GS via Python-list wrote:

> Then there is that discovery
> element: Why is my original
> idea not working? I still
> cannot pass the value back
> from the function.  What is
> different about this function
> that others would have given
> me the value?

There is nothing different, see the code below.
print() is a function like any other.
In this case it is called after you close the window, ie after mainloop() exits.
But any other function called inside
mainloop - eg any other event handler can also access it.

For example, if you added a button:

def printW(): print("Button Ww = ", Ww)

bw = tk.Button(root, text="Print Width", command=printW)
bw.pack()

You would be able to print the value on demand.

>> import tkinter as tk
>>
>> Ww = None
>>
>> def on_configure(*args):
>>         global Ww
>>         Ww = root.winfo_width()
>>         print("Ww Inside =<"+str(Ww)+">")
>>
>> root = tk.Tk()
>> root.bind('<Configure>',on_configure)
>> root.mainloop()
>>
>> print("Ww Outside = <"+str(Ww)+">")

--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos




More information about the Python-list mailing list