#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()
, поэтому я хотел написать несколько программ, используя его.