我在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
答案 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))]