функция map (), похоже, не выполняет то, что она должна делать

#python #python-3.x #tkinter

#python #python-3.x #tkinter

Вопрос:

Я пытаюсь отобразить на экране кучу меток tkinter, сохраняя текст и другие данные, такие как значение padx и pady для этого виджета, в кортеже, вложенном в список. Я пытаюсь выполнить итерацию по каждому элементу списка и отобразить метку с помощью map() функции. Вот минимальный пример моего кода

 import tkinter as tk
import tkinter.ttk as ttk
from ttkthemes import ThemedTk


def func() :
    print("in func")
    def populate(tple) :
        print(f"In populate with tuple {tple}")
        label = ttk.Label(frame,text=tple[0],style=tple[1])
        label.grid(row=lst.index(tple),column=0,padx=tple[2],pady=tple[3],sticky=tple[4])
        frame.update_idletasks()

    tk.Grid.columnconfigure(frame, 0, weight=1)
    lst = [("This is text1","style1.TLabel",40,15,None),
        ("This is text2","style2.TLabel",20,15,tk.S)]
    map(populate, lst)

frame = ThemedTk(theme="black")
frame.config(bg="#424242")
style = ttk.Styles()
func()

frame.mainloop()
 

Но по какой-то причине, похоже, map() не работает. Мой вопрос в том, почему это так? Это потому, что я использую не map() так, как должен? Если да, то как мне правильно его использовать?

Ответ №1:

map() просто вернет итератор, который необходимо использовать для применения переданной функции. Используйте что-то вроде list() или all() для его использования:

 all(map(populate, lst))
 

Комментарии:

1. Спасибо! использование list() исправило это для меня

2. И теперь вы создаете возвращаемое значение и список, который вам не нужен. Почему бы и нет for entry in lst: populate(entry) ?

3. Я понимаю, что мне не нужно использовать map() и я мог бы просто использовать цикл simpIe for, но я только учился map() , поэтому я хотел написать несколько программ, используя его.