How to access a variable from one tab in another tab of a notebook?

Mohsen Owzar mohsen.owzar at gmail.com
Thu Apr 8 01:01:43 EDT 2021


Alan Gauld schrieb am Donnerstag, 8. April 2021 um 02:05:01 UTC+2:
> On 07/04/2021 09:35, Mohsen Owzar wrote: 
> 
> > The problem is that I can't use the variable "val" from Tab2 in Tab 1,
> > # Filename: Tab1.py 
> > from tkinter import * 
> > 
> > def gen_t1(frame): 
> > f = LabelFrame(frame, text='f', bg='lightgreen') 
> > f.pack(expand=True, fill='both') 
> > 
> > b1 = Button(f, text='B1').pack() 
> > 
> > ## if val > 5:
> > # Filename: Tab2.py 
> > from tkinter import * 
> > 
> > def gen_t2(frame): 
> > def getValue(event): 
> > val = ent.get() 
> > print(val)
> Note that val is a local variable within a nested function. 
> It only exists while the nested function is executing. 
> As soon as the function ends val is thrown away. 
> 
> If you want the value of the entry you need to store it 
> in a variable that is visible after the function exits 
> (by returning it perhaps? or setting a global - ugly) 
> 
> But you still have the problem of making that visible 
> to Tab1. You could import tab2 into tab1 and use Tab2.varName 
> 
> 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.
> > from Tab1 import gen_t1 
> > from Tab2 import gen_t2
> ...
> > def on_tab_change(event): 
> > global firstTime1, firstTime2 
> > 
> > tab = event.widget.tab('current','text') 
> > if tab == 'Tab 1': 
> > print('Tab 1') 
> > if firstTime1 == 1: 
> > gen_t1(tab1) 
> > firstTime1 = 0
> Probably nicer to use boolean values for 
> firstTime1 and firstTime2, ie True and False 
> rather than their numeric equivalents. 
> 
> HTH 
> -- 
> 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

Hi Alan G,
Thanks a lot for giving me this solution.
Because I'm a newbie in Python and write programs since a couple of months, and I'm not so familiar with classes, 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.

Best regards
Mohsen


More information about the Python-list mailing list