从具有多个参数列表的多个对象列表中调用方法

时间:2018-01-26 09:58:11

标签: python dictionary tkinter lambda functional-programming

我在Python中使用Tkinter,我创建了多个TextWidgets。 我将这些对象放在一个名为output的列表中。 每个文本小部件都有属性文本,可以使用方法.delete(index1,index2)和insert(index,chars)进行更改。

现在,我想应用插入功能。从另一个函数kg_to_pounds_ounces_grams我得到Text Widgets的值列表:

for textWidget,weight  in zip(output, kg_to_pounds_ounces_grams(kg) ):
    textWidget.delete(1.0, END)
    textWidget.insert(END,weight)

如何将insert应用于Output以使pound进入TextWidget1,进入TextWidget2并进入TextWidget3,并在单行表达式中只调用一次kg_to_pounds_ounces_grams函数? delte也一样 - 也适用于所有的一行?

编辑: 我设法分三行:

from tkinter import *

window = Tk()


def kg_to_pounds_ounces_grams(kilogram):
    pound = kilogram * 2.20462
    ounce = kilogram * 35.274
    gram = kilogram * 1000
    return [pound, ounce, gram]


def convert_button_pressed():
    try:
        kg = float(e1_text.get())
    except:
        kg = float("NaN")
    map(lambda x: x.delete(1.0, END), output)
    # Missing Code goes here!


l1 = Label(window, text="Kg")
l1.grid(row=0, column=0)

e1_text = StringVar()
e1 = Entry(window, textvariable=e1_text)
e1.grid(row=0, column=1)

b1 = Button(window, text="Convert", command=convert_button_pressed)
b1.grid(row=0, column=2)

t1 = Text(window, height=1, width=20)
t1.grid(row=1, column=0)

t2 = Text(window, height=1, width=20)
t2.grid(row=1, column=1)

t3 = Text(window, height=1, width=20)
t3.grid(row=1, column=2)

output = [t1, t2, t3]

window.mainloop()

但它仍困扰着我 - 没有优雅的双线解决方案吗?

为了更好地理解,我把完整的代码放在这里:

ngFor

1 个答案:

答案 0 :(得分:0)

与您的delete行类似,您可以在一行中插入...但为了便于阅读,我不推荐这些单行。

应该注意的是,将lambda与map结合使用有点傻,列表理解会更清晰:

[x.delete(1.0, END) for xin output]

对于插入:

[x.insert(END, w) for x, w in zip(output, kg_to_pound_ounces_grams(kg))]

我想你甚至可以将它们结合起来,但我再也不推荐其中任何一种。

[(x.delete(1.0, END), x.insert(END, w)) for x, w in zip(output, kg_to_pound_ounces_grams(kg))]