Notebook index('current')

Fragen zu Tkinter.
Antworten
majorkeen
User
Beiträge: 6
Registriert: Freitag 23. Dezember 2016, 17:57

Hallo zusammen,

bei folgendem Code würde ich eigentlich erwarten, das mir der Index des ausgewählten Tab ausgegeben wird. Dem ist leider nicht so...?
bekomme immer nur: >> tab index:0
- Kann mir jemand sagen warum?
- Wie löst man dieses?
Vielen Dank !
Gruß Holgus

verwendet wird Python 3.6.0:

Code: Alles auswählen

from tkinter import *
from tkinter.ttk import *
import sys

def update_tabs(tab):
    print('tab index:',tab)

def main():
  
    root = Tk()
    root.title('test')

    notebook = Notebook(root)
    tab1 = Frame(notebook)
    tab2 = Frame(notebook)
    tab3 = Frame(notebook)
    tab4 = Frame(notebook)
    tab5 = Frame(notebook)
    
    notebook.add(tab1, text='tab1')
    notebook.add(tab2, text='tab2')
    notebook.add(tab3, text='tab3')
    notebook.add(tab4, text='tab4')
    notebook.add(tab5, text='tab5')
    notebook.grid(row=0, column=0)
    #notebook.bind("<<NotebookTabChanged>>", lambda _event, tab = notebook.index('end'): update_tabs(tab))
    notebook.bind("<<NotebookTabChanged>>", lambda _event, tab = notebook.index('current'): update_tabs(tab))
 
    root.mainloop()
    
if __name__ == '__main__':
    main()
Zuletzt geändert von Anonymous am Samstag 7. Januar 2017, 19:07, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 18294
Registriert: Sonntag 21. Oktober 2012, 17:20

@majorkeen: »notebook.index« wird bei der Definition des Lambda-Ausdrucks ausgewertet. Zu diesem Zeitpunkt ist ja der erste Tab aktiv, also 0. Du willst wahrscheinlich, dass es bei jedem Tab-Changed ausgewertet wird:

Code: Alles auswählen

notebook.bind("<<NotebookTabChanged>>", lambda _event: update_tabs(notebook.index('current')))
majorkeen
User
Beiträge: 6
Registriert: Freitag 23. Dezember 2016, 17:57

Super! genau das war es. Vielen Dank!
Antworten