начать Q для Ткинтер - PullRequest
0 голосов
/ 10 мая 2018

Я хочу использовать tk для этого: enter image description here

Левый текст и Правая кнопка в одной строке, текстовые данные хранятся в списке, поэтому я использую цикл:

  for file in listname:
    fr = Frame(app)
    Label(fr,text = file).grid(row =row,column=0)
    Button(fr,text = 'download',command =lambda: download(file)).grid(row = row,column=3)

Но когда я нажимаю одну кнопку, parm всегда является последним элементом в списке, так что я могу сделать, чтобы создать кнопку с другим parm в одном цикле?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Ваша лямбда неверна.

 import tkinter as tk

from tkinter import ttk

listname = ['f1', 'f2', 'f3']


def download(file):
    print(file)


win = tk.Tk()
fr = tk.Frame(win)
fr.grid(row=0, column=0)
for row, file in enumerate(listname):
    tk.Label(fr, text=file).grid(row=row, column=0)
    tk.Button(fr, text='download',
              command=lambda f=file: download(f)).grid(row=row, column=1)

win.mainloop()
0 голосов
/ 10 мая 2018

Вместо использования лямбды, попробуйте использовать частичное. Включите from functools import partial в верхней части кода и замените все звонки, как

lambda: download(file)

с

partial(dowload, file)

Ссылка ниже должна объяснить вам, почему это работает.

Как работает функция functools в Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...