Python 向按钮列表中的每个按钮添加事件

Python 向按钮列表中的每个按钮添加事件,python,tkinter,Python,Tkinter,我正在用tkinter做一个文件浏览器,我遇到了一些问题。 我已经列出了一个按钮列表,我希望当我点击每个按钮时,它会给我按钮当前路径的地址。问题是它总是保存最后一条路径。我可以为每个按钮指定路径吗?以下是我编写的代码(路径只是我创建的一个类,它基本上是一个缓冲区): def make_按钮(窗口、文件夹、路径、路径):#制作按钮列表 按钮=[] 对于文件夹中的文件夹: button=tkinter.button(窗口,文本=文件夹[len(路径):len(文件夹)]) button.bind(“

我正在用tkinter做一个文件浏览器,我遇到了一些问题。 我已经列出了一个按钮列表,我希望当我点击每个按钮时,它会给我按钮当前路径的地址。问题是它总是保存最后一条路径。我可以为每个按钮指定路径吗?以下是我编写的代码(路径只是我创建的一个类,它基本上是一个缓冲区):

def make_按钮(窗口、文件夹、路径、路径):#制作按钮列表
按钮=[]
对于文件夹中的文件夹:
button=tkinter.button(窗口,文本=文件夹[len(路径):len(文件夹)])
button.bind(“,add_new(文件夹,路径))
按钮。追加(按钮)
返回按钮

您需要在绑定中指定一个lambda,在该绑定中调用
add\u new
,否则该绑定在触发时将无法正常工作

以下是使用lambda的示例:

import tkinter as tk


root = tk.Tk()
buttons = []


def add_new(folder, paths):
    print(folder, paths)


def make_buttons(folders, path, paths):
    for folder in folders:
        buttons.append(tk.Button(root, text=folder))
        buttons[-1].pack()
        buttons[-1].bind("<Button-1>", lambda e, f=folder: add_new(f, paths))


make_buttons(['folder1', 'folder2', 'folder3'], r'C:\Users\Desktop', [r'C:\Users\p1', r'C:\Users\p2' , r'C:\Users\p3'])
root.mainloop()
将tkinter作为tk导入
root=tk.tk()
按钮=[]
def add_new(文件夹、路径):
打印(文件夹、路径)
def make_按钮(文件夹、路径、路径):
对于文件夹中的文件夹:
buttons.append(tk.Button(根,文本=文件夹))
按钮[-1].pack()
按钮[-1]。绑定(“,lambda e,f=文件夹:添加新(f,路径))
制作按钮(['folder1','folder2','folder3'],r'C:\Users\Desktop',[r'C:\Users\p1',r'C:\Users\p2',r'C:\Users\p3']))
root.mainloop()

您的绑定无法使用您定义的方式
添加新内容()
。需要使用lambda或单独提供参数。
import tkinter as tk


root = tk.Tk()
buttons = []


def add_new(folder, paths):
    print(folder, paths)


def make_buttons(folders, path, paths):
    for folder in folders:
        buttons.append(tk.Button(root, text=folder))
        buttons[-1].pack()
        buttons[-1].bind("<Button-1>", lambda e, f=folder: add_new(f, paths))


make_buttons(['folder1', 'folder2', 'folder3'], r'C:\Users\Desktop', [r'C:\Users\p1', r'C:\Users\p2' , r'C:\Users\p3'])
root.mainloop()