ich bin neu hier und noch sehr unsicher in Python (Ein Satz, mit dem wahrscheinlich 85% der ersten Beiträge beginnen).
Derzeit schreibe ich an einer IDE mit einem eigenen Editor. Wie in einer modernen IDE üblich, sollen verschiedene Reiter mit Sourcecodes geöffnet werden können.
Die Tabs erzeuge ich dynamisch, z.Bsp. beim Öffnen einer neuen Datei, etc, über ein ttk.Notebook Widget.
Mein Problem ist, ich verstehe nicht wie ich die einzelnen Widgets aus den einzelnen Tabs ansteuern kann.
z.Bsp.:
Irgendwann möchte ich compilieren. Dazu soll auf das Text-Widget des aktuellen Reiters zugegriffen werden.
Es gibt aber keinen eindeutigen Schlüssel/Namen für das Text-Widget.
In dem Beispiel unten soll einfach nur der Text des aktuellen Tabs auf der Konsole ausgegeben werden.
Google ist natürlich mein Freund aber ich konnte nichts finden.
Vielleicht umschreibe ich das Problem bei der Suche falsch....
Ich hoffe, ich habe mich verständlich ausgedrückt.
Zur Veranschaulichung hier mal ein (nicht funktionierender) Beispielcode.
Code: Alles auswählen
from tkinter import Button, Tk, Menu, Text, Frame
from tkinter.ttk import Notebook
from tkinter.filedialog import askopenfile
notebook_list = []
def printText(event):
print(text) # dient nur der Veranschaulichung. Mir ist klar, dass das so nicht funktionieren kann.
#hier soll jede Menge Code hin, der den Text aus dem ativen Tab-Text-Widget entgegennimmt und zurückschreibt.
def add_tab(parent, contents, name):
frame = Frame()
text = Text(frame)
text.pack()
notebook_list.append(frame)
frame = notebook_list[len(notebook_list) - 1]
parent.add(frame, text=name)
text.insert('end', contents)
def open_file():
file = askopenfile(filetypes=[('Text file', '*.txt')])
if file:
add_tab(notebook, file.read(), file.name.split('/')[-1])
root = Tk()
menu_bar = Menu(root)
file_menu = Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label='File', menu=file_menu)
file_menu.add_command(label='Open', command=open_file)
root.config(menu=menu_bar)
btn1 = Button(root)
btn1.configure(text='print Text', command=printText)
btn1.pack(anchor='nw', padx='2', pady='2', side='top')
notebook = Notebook(width=800, height=600)
notebook.pack()
add_tab(notebook, 'Hallo Welt', 'Beispiel1')
root.mainloop()
Gruß
aitsch