如何为 PanedWindow 的每个窗格中包含的每个按钮定义特定命令?

How to define specific commands for each button included in each pane of a PanedWindow?

我想创建一个具有可变数量窗格的 PanedWindow,其中每个窗格都包含一个标签和一个按钮。按下窗格中的按钮应将消息写入该窗格中的相应标签。 我试过这段代码:

from tkinter import *
from tkinter import ttk

n = 5
root = Tk()
root.geometry('250x500+100+100')

p = ttk.Panedwindow(root, orient=VERTICAL)
p.grid(column=0, row=0, sticky=(N, S, W, E))

for i in range(n):
    pane = ttk.Labelframe(p, width=25, borderwidth=0)
    p.add(pane)
    def writeToLabel():
        paneLabel.config(text='This is Pane number %d' %(i+1))
    paneLabel = ttk.Label(pane, width=20, relief='solid')
    paneButton = ttk.Button(pane, text='Press', command=writeToLabel)
    paneButton.grid(column=0, row=0, padx=5)
    paneLabel.grid(column=1, row=0, padx=5)

root.rowconfigure(0, weight=1)

root.mainloop()

但无论按下哪个按钮,最后一行的标签都会设置消息。

如果有人能帮助我解决问题,我将不胜感激。

我认为这就是您正在寻找的东西:

from tkinter import *
from tkinter import ttk

n = 5
root = Tk()
root.geometry('250x500+100+100')

p = ttk.Panedwindow(root, orient=VERTICAL)
p.grid(column=0, row=0, sticky=(N, S, W, E))


def writeToLabel(pl, i):
    pl.config(text='This is Pane number %d' %(i+1))

for i in range(n):
    pane = ttk.Labelframe(p, width=25, borderwidth=0)
    p.add(pane)
    paneLabel = ttk.Label(pane, width=20, relief='solid')
    paneButton = ttk.Button(pane, text='Press', command=lambda pl=paneLabel, i=i: writeToLabel(pl, i))
    paneButton.grid(column=0, row=0, padx=5)
    paneLabel.grid(column=1, row=0, padx=5)

root.rowconfigure(0, weight=1)

root.mainloop()

您当前的方法不起作用,因为 writeToLabel 的定义将使用 paneLabeli 的最后一个值。相反,您需要使用 lambda 函数传递对标签的引用和 i 的值。对 lambda 函数的 pl=paneLabeli=i 部分进行了解释 here.