ошибка IndexError: tuple index out of range tkinter
Функция edit_item должен через кнопку edit давать пользователю изменять элементы в listbox, но выходить ошибка:
index = selection[0]
IndexError: tuple index out of range
вот код
import tkinter as tk
import sqlite3
def edit_item():
selection = listbox.curselection() # получаем индекс выбранного элемента
index = selection[0]
value = listbox.get(index) # получаем значение выбранного элемента
entry1.delete(0, END) # очищаем entry_1
entry2.delete(0, END) # очищаем entry_2
entry3.delete(0, END)
entry4.delete(0, END)
entry1.insert(0, value) # устанавливаем значение entry_1
entry2.insert(0, value) # устанавливаем
entry3.insert(0, value)
entry4.insert(0, value)
def add_item():
# Создать список из значений entry, entry1, entry2 и entry3
item_values = [entry1.get(), entry2.get(), entry3.get(), entry4.get()]
# Вставить список значений в Listbox
listbox.insert(tk.END, item_values)
# Очистить значения Entry виджетов
entry1.delete(0, tk.END)
entry2.delete(0, tk.END)
entry3.delete(0, tk.END)
entry4.delete(0, tk.END)
def open_add_item_window():
# Создать новое окно
window = tk.Toplevel()
# Создать Entry виджеты
global entry1, entry2, entry3, entry4
entry1 = tk.Entry(window)
entry2 = tk.Entry(window)
entry3 = tk.Entry(window)
entry4 = tk.Entry(window)
# Создать кнопку для добавления элемента
add_button = tk.Button(window, text="Добавить", command=add_item)
lb1 = tk.Label(window,text="family")
lb2 = tk.Label(window,text="name")
lb3 = tk.Label(window,text="father")
lb4 = tk.Label(window,text="pass")
# Разместить Entry виджеты и кнопку на окне
lb1.pack()
entry1.pack()
lb2.pack()
entry2.pack()
lb3.pack()
entry3.pack()
lb4.pack()
entry4.pack()
add_button.pack()
def del_list():
select = list(listbox.curselection())
select.reverse()
for i in select:
listbox.delete(i)
# Создаем соединение с базой данных
conn = sqlite3.connect('agents.db')
# Создаем объект курсора для выполнения запросов
cursor = conn.cursor()
# Выполняем запрос на выборку данных из таблицы agents
cursor.execute("SELECT * FROM agents")
data = cursor.fetchall()
ListData=list(data)
# Создаем окно Tkinter
root = tk.Tk()
Frame_list = tk.Frame(root,width=500,height=500,bg="green")
Frame_entry = tk.Frame(root,width=500,height=500,bg="red")
Frame_supp = tk.Frame(root,width=500,height=500,bg="blue")
Frame_list.grid(row=0,column=0,sticky="wsne")
Frame_entry.grid(row=0,column=1,sticky="wsne")
Frame_supp.grid(row=0,column=2,sticky="wsne")
# Создаем объекты Listbox и Entry и добавляем данные из базы данных
listbox = tk.Listbox(Frame_list, width=40, height=25)
listbox.grid(row=0, column=0, columnspan=2)
# Создаем 4 объекта Entry для отображения каждого элемента в базе данных
lb=tk.Label(Frame_entry,text="family")
lb.grid(row=0,column=0)
entry1 = tk.Entry(Frame_entry, width=20)
entry1.grid(row=1, column=0, padx=10, pady=10)
lb1=tk.Label(Frame_entry,text="name")
lb1.grid(row=2,column=0)
entry2 = tk.Entry(Frame_entry, width=20)
entry2.grid(row=3, column=0, padx=10, pady=10)
lb2=tk.Label(Frame_entry,text="father")
lb2.grid(row=4,column=0)
entry3 = tk.Entry(Frame_entry, width=20)
entry3.grid(row=5, column=0, padx=10, pady=10)
lb3=tk.Label(Frame_entry,text="pass")
lb3.grid(row=0,column=1)
entry4 = tk.Entry(Frame_entry, width=20)
entry4.grid(row=1, column=1, padx=10, pady=10)
# Функция обработки выбора элемента в Listbox
def on_select(event):
# Check if an item has been selected
if listbox.curselection():
# Get the index of the selected item
index = listbox.curselection()[0]
# Get the data for the selected item
item = data[index]
# Update the Entry widgets with the selected data
entry1.delete(0, tk.END)
entry1.insert(0, item[1])
entry2.delete(0, tk.END)
entry2.insert(0, item[2])
entry3.delete(0, tk.END)
entry3.insert(0, item[3])
entry4.delete(0, tk.END)
entry4.insert(0, item[4])
add = tk.Button(Frame_list,text="add",command=open_add_item_window,width=15)
add.grid(row=1,column=0 )
del1 = tk.Button(Frame_list,text="delete",command=del_list,width=15)
del1.grid(row=1,column=1 )
edit = tk.Button(Frame_entry,text="edit",command=edit_item,width=15)
edit.grid(row=6,column=0 )
# Привязываем функцию on_select к событию выбора элемента в Listbox
listbox.bind('<<ListboxSelect>>', on_select)
# Заполняем Listbox данными из базы данных
for row in data:
listbox.insert(tk.END, row[1:4])
# Запускаем главный цикл окна
root.mainloop()
# Закрываем соединение с базой данных
conn.close()
Источник: Stack Overflow на русском