How to access a variable from one tab in another tab of a notebook?
Mohsen Owzar
mohsen.owzar at gmail.com
Fri Apr 9 00:14:16 EDT 2021
Alan Gauld schrieb am Donnerstag, 8. April 2021 um 15:40:19 UTC+2:
> On 08/04/2021 06:01, Mohsen Owzar wrote:
>
> >> But this is why GUIs are often(usually?) built as a class
> >> because you can store all the state variables within
> >> the instance and access them from all the methods.
> >>
> >> You can do it with functions but you usually wind up
> >> with way too many globals to be comfortable.
> > Because I'm a newbie in Python and write programs since
> > a couple of months, and I'm not so familiar with classes,
> OK, In that case you should probably read up on classes
> and play around with them to get used to the ideas of
> classes, objects and methods.
>
> You can carry on using functions but you will need to
> keep track of quite a lot of global variables which
> can get messy in bigger programs. Classes just keep
> things a bit more tidy.
> > would be very nice to give me a code, how I have to
> > change my code into a class form.
> > I tried without a class and I ran into problems that
> > the defined frame and entry are not defined.
> One of the problems in your code is that you are not
> storing references to the widgets you create. You are
> relying on the containment tree to store the references
> and keep them alive. But that makes it difficult to
> access. As a general rule of thumb if you are creating
> any widget that responds to events you should keep
> a reference to it - ie. create a variable.
>
> For example in your code you have a section like this:
>
> def gen_t2(frame):
> def getValue(event):...
> lbl = Label(frame, text='Val').pack()
>
> ent = Entry(frame)
> ent.pack()
> ent.insert(0, '2')
>
> ent.bind('<Return>', getValue)
> And you call it like this:
>
> if firstTime2 == 1: if firstTime2 == 1:
> gen_t2(tab2)
> firstTime2 = 0
>
> gen_t2(tab2)
> firstTime2 = 0
>
> Inside the function you store a reference to the Entry as ent.
> but ent disappears as soon as the function ends, you cannot
> use ent to access your entry outside the function.
> You need to return the widget like so:
>
> def gen_t2(frame):
> def getValue(event):...
>
> ...
> ent.bind('<Return>', getValue)
> return ent
>
> And then call it like:
>
> if firstTime2:
> entry_field = gen_t2(tab2)
> firstTime2 = False
>
> Now you can access your Entry field via the global
> variable entry_field.
>
> I suspect you should forget about the classes for now, focus
> on getting the functions to work, especially returning values
> and storing those in global variables that you can access from
> elsewhere. These principles are just as important when you
> get round to studying classes later.
>
> And remember that global variables in one module can be
> accessed from another module by importing the first module
> into the second and using the module name as prefix.
>
> import tab2
>
> txt = tab2.entry_field.get()
>
> HTH
>
> You might also find the functions, namespaces and GUI sections
> of my tutorial useful (see below).
> --
> 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
Hello Alan,
I'm so happy that you have so good explained to me, what I have to do.
Now, it is a bit clearer how I can use the variables or references in another modules.
I try to follow your suggestions to see if I can solve my problem.
Again thank you very much.
Best regards
Mohsen
More information about the Python-list
mailing list