首页 > 解决方案 > 在 tkinter 中创建事件之间的关系

问题描述

我有一个带有事件函数的列表框和一个组合框(使用 python 的 tkinter),但找不到在这两个事件之间建立任何关系的方法。

我用 sqlite3 建立了一个存储费用的数据库(相关列是 'category' ,'cost')。

在我的 GUI 中,我有一个包含所有数据库行的列表框。我添加了一个组合框,使我能够选择特定类别,然后单击其中一个类别后,我只能在列表框中看到具有此特定类别的条目(简单绑定和事件功能)。

除此之外,我还有一个条目小部件。单击列表框中的特定行时,该行的成本列将插入到条目小部件中。

当我第一次触发 Combobox 事件然后尝试单击 Listbox 中的特定行以触发 Listbox 事件时,就会出现问题。条目小部件中没有插入任何内容。

我的这些事件函数的代码:

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)

标签: pythoneventstkinterbind

解决方案


我设法追溯了这个问题。问题是由我的数据库类引起的,它有一个视图函数,它返回一个元组内的 4 个元素,但我只返回了 3 个其他视图函数。所以“selected_tuple[2]”的索引是一个空字符串,这就是为什么我不能'在条目中看不到该值的任何表示。

感谢您的帮助和指导!


推荐阅读