我可以双击 tkinter 列表框选项来调用 Python 中的函数吗?

Posted

技术标签:

【中文标题】我可以双击 tkinter 列表框选项来调用 Python 中的函数吗?【英文标题】:Can I double-click a tkinter Listbox option to invoke function in Python? 【发布时间】:2014-09-25 02:46:48 【问题描述】:

我有一个带有关联“选择”按钮的列表框。我希望我的 GUI 双击任何 Listbox 值都会调用此按钮的命令。我的尝试(下面)在选择一个选项时工作,并且用户双击窗口中的任何位置。我希望它仅在双击选择本身(蓝色突出显示的行)时才起作用。

最好的方法是什么?

from tkinter import *

def func1():
    print("in func1")

def func2():
    print("in func2")

def selection():
    try:
        dictionary[listbox.selection_get()]()
    except:
        pass

root = Tk()

frame = Frame(root)
frame.pack()

dictionary = "1":func1, "2":func2

items = StringVar(value=tuple(sorted(dictionary.keys())))

listbox = Listbox(frame, listvariable=items, width=15, height=5)
listbox.grid(column=0, row=2, rowspan=6, sticky=("n", "w", "e", "s"))
listbox.focus()

selectButton = Button(frame, text='Select', underline = 0, command=selection)
selectButton.grid(column=2, row=4, sticky="e", padx=50, pady=50)

root.bind('<Double-1>', lambda x: selectButton.invoke())

root.mainloop()

【问题讨论】:

【参考方案1】:

root.bind(...) 更改为listbox.bind(...)

【讨论】:

我犯了一个愚蠢的错误。感谢您指出。这让我发疯了!【参考方案2】:

在绑定中,您应该使用应该在&lt; &gt; 内部传递的序列和传递函数:

listbox.bind('<Double-Button>', function)

【讨论】:

以上是关于我可以双击 tkinter 列表框选项来调用 Python 中的函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 python tkinter 中每次连续单击后都会触发双击事件

在 tkinter 中禁用鼠标双击事件

哪个更适合tkinter网格,放置单个项目或循环遍历列表来放置它们?

如何在 tkinter 中显示数据框

带有 MySQLdb 的 Python Tkinter 列表框

永久添加/删除tkinter列表框中的项目