Создание связи между событиями в tkinter - PullRequest
0 голосов
/ 01 октября 2019

У меня есть Listbox и Combobox (использующий tkinter в Python) с функциями событий, и я не могу найти какой-либо связи между этими двумя событиями.

Я создал базу данных с sqlite3, в которой хранятся расходы (соответствующие столбцы: «категория», «стоимость»).

В моем графическом интерфейсе у меня есть список, который содержит все строки базы данных. Я добавил Combobox, который позволяет мне выбрать определенную категорию, и после того, как я щелкну одну из категорий, я могу видеть только записи с этой конкретной категорией в списке (простая функция привязки и события).

В дополнениек этому у меня есть виджет входа. Если щелкнуть конкретную строку в списке, столбец стоимости этой строки будет вставлен в виджет ввода.

Проблема возникает, когда я сначала запускаю событие Combobox, а затем пытаюсь щелкнуть конкретную строку в списке, чтобы вызвать событие списка. Ничего не вставлено в виджет ввода.

Мой код для этих функций событий:

global selected_cat
"""event triggered by clicking on a row in Combobox.
   lb is Listbox widget.
   selected_cat will store the selected category.
   db is the Database
"""
def get_selected_category(event):
    selected_cat=cat.get()
    lb.delete(0,END)
    for i in db.search_by_category(selected_cat):
        lb.insert(END,i)

"""event triggered by clicking on a row in Listbox.
   lb is Listbox widget.
   selected_tuple is a tuple which contains (id,category,cost)
"""
def get_selected_row(event):

        global selected_tuple
        print(lb.curselection())
        index=lb.curselection()[0]
        if index != ():
            selected_tuple=lb.get(index)
            print(selected_tuple)
            e1.delete(0,END)
            e1.insert(END,str(selected_tuple[2])+" ILS")

это привязки:

lb.bind('<<ListboxSelect>>',get_selected_row)
cat.bind('<<ComboboxSelected>>', get_selected_category)

1 Ответ

0 голосов
/ 02 октября 2019

Мне удалось отследить проблему. Проблема была вызвана моим классом Database, который имеет функцию представления, которая возвращает 4 элемента внутри кортежа, но некоторые другие функции представления я вернул только 3. Таким образом, индексирование «selected_tuple [2]» было пустой строкой, и поэтому я не могне вижу никакого представления этого значения в записи.

Спасибо за помощь и руководство!

...