Вы можете использовать lambda
для присвоения функции с аргументом command=
command=lambda:print_dummylistvar(lbl)
Но поскольку вы создаете много меток в l oop, вам также понадобится arg=lbl
для копирования ссылки из lbl
в новую переменную.
command=lambda arg=lbl:print_dummylistvar(arg)
Без этого все кнопки будут использовать ссылку на одну и ту же этикетку - последняя метка, созданная в for
-l oop
Это нужно будет напечатать lbl['text']
def print_dummylistvar(widget):
print(widget['text'])
Рабочий код
import tkinter as tk
#from tkinter import * # PEP8: `import *` is not preferred
from tkinter import ttk
# --- functions ---
def print_dummylistvar(widget):
print(widget['text'])
# --- main ---
dummylist = ["a", "b", "c"]
root = tk.Tk()
for number, text in enumerate(dummylist):
lbl = tk.Label(root, text=text)
lbl.grid(column=0, row=number)
button = tk.Button(root, text='Print', command=(lambda arg=lbl:print_dummylistvar(arg)))
button.grid(column=1, row=number)
root.mainloop()
BTW: Вместо ссылки на этикетку вы также можете использовать текст
button = tk.Button(root, text='Print', command=(lambda arg=text:print_dummylistvar(arg)))
и он получает текст вместо метки, поэтому ему не нужно lbl['text']
def print_dummylistvar(text):
print(text)
import tkinter as tk
from tkinter import ttk
# --- functions ---
def print_dummylistvar(text):
print(text)
# --- main ---
dummylist = ["a", "b", "c"]
root = tk.Tk()
for number, text in enumerate(dummylist):
lbl = tk.Label(root, text=text)
lbl.grid(column=0, row=number)
button = tk.Button(root, text='Print', command=(lambda arg=text:print_dummylistvar(arg)))
button.grid(column=1, row=number)
root.mainloop()