Tkinter-Listbox-Auswahlfehler beim Wechseln der Registerkarten
Posted: 03 Jan 2025, 07:53
Ich habe eine Registerkartenoberfläche mit Listenfeldern auf jeder Registerkarte. Beim Wechseln der Registerkarten tritt bei der ersten Auswahl auf der neuen Registerkarte ein Fehler auf (Indexfehler), jede Auswahl danach wird jedoch korrekt erkannt. Ich habe es geschafft, den Fehler in diesem vereinfachten Beispiel zu reproduzieren:
Dieses Problem verursacht einen gefährlichen Fehler in einem größeren Programm, da der Fehler dazu führt, dass der ausgewählte Index von der zuvor ausgewählten Registerkarte „durchläuft“. Ich habe diesen Fehler auf dieses Problem eingegrenzt.
Ich habe versucht, das vergangene Ereignis zu untersuchen, um zu sehen, ob es eine Klärung gibt, aber es gab keinen Hinweis – oder keine Klarstellung gefunden werden.
Code: Select all
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
"""basic class to replicate tab-switching error"""
def __init__(self):
"""exactly what it looks like"""
super().__init__()
self.items = {'Alphic': ["A","B","C",'c','d'], 'Numera':['1','2','3','4','5','6']}
self.selection = tk.StringVar()
self.main = tk.Frame()
self.tabs = ttk.Notebook(self.main)
self.make_tabs()
self.main.pack()
def make_tabs(self):
"""create all tabs in collected data"""
def make_tab(f, data):
'create single tab'
frame = ttk.Frame(self.tabs)
select = tk.Listbox(frame,
width = 20,
height = 8)
def update_selection(*_):
try:
index = [i for i in select.curselection()][0]
except IndexError:
index = "This Error Right Here"
print(index)
for n,k in enumerate(data):
print("inserting", n)
select.insert(n+1,k)
select.pack()
frame.pack()
select.bind('', update_selection)
return frame
for i, k in self.items.items():
self.tabs.add(make_tab(i,k), text=i)
self.tabs.pack()
if __name__ == "__main__":
a = App()
a.mainloop()
Ich habe versucht, das vergangene Ereignis zu untersuchen, um zu sehen, ob es eine Klärung gibt, aber es gab keinen Hinweis – oder keine Klarstellung gefunden werden.