下面的腳本會要求用戶輸入並打開一個窗口。然後,我想從窗口獲取信息,並將它們放入列表或類似的列表中,以便創建類「參數」類的對象。除了當我嘗試使用Entry.get提取數據以將它們放入列表列表中時,所有東西都可以工作。python和Tkinter。用Entry.get構建列表清單
class Parameter (object):
def __init__(self,number_individuals_classes,payoff):
self.nb_classes = number_individuals_classes
self.payoff = payoff
def __repr__(self):
print('nc.classes: {} | payoff: {}'.format(self.nb_classes,self.payoff))
def get_parameters():
def get_payoff():
global payoff
payoff = []
for i in xrange(len(entr)):
payoff.append(map(Entry.get, entr[i]))
fen1.destroy()
number_individual_classes = input('Number of individual classes: ')
fen1 = Tk()
fen1.title('Enter payoff matrices')
header1 = Label(fen1,text='Cooperation').grid(row=0,column=2)
header2 = Label(fen1,text='Defection').grid(row=0,column=3)
other_txts = []
focal_txts = []
vert_cop_def_txts = []
entr = []
iteration = 0
for focal in range(1,number_individual_classes):
for other in range(focal+1,number_individual_classes+1):
focal_txts.append(Label(fen1,text='Effect on: {}'.format(focal)).grid(column=0,row=3*iteration+2))
vert_cop_def_txts.append((Label(fen1,text='Cooperation').grid(column=1,row=3*iteration+2),Label(fen1,text='Defection').grid(column=1,row=3*iteration+3)))
other_txts.append(Label(fen1,text=' '*65 +'Co-player: {}'.format(other)).grid(row=3*iteration+1,column=2))
entr.append((Entry(fen1).grid(row=iteration*3+2,column=2),Entry(fen1).grid(row=iteration*3+2,column=3),Entry(fen1).grid(row=iteration*3+3,column=2),Entry(fen1).grid(row=iteration*3+3,column=3)))
iteration+=1
Button(fen1,text='Done',command=get_payoff).grid()
fen1.mainloop()
to_return = Parameter(number_individual_classes,payoff)
return to_return
a=get_parameters()
我在做什麼錯?
更新:
這項工作。有什麼不同 ?
from Tkinter import *
def super_function():
out = map(Entry.get, entr)
fen1.destroy()
print out
fen1 = Tk()
entr = []
for i in xrange(10):
entr.append(Entry(fen1))
entr[i].grid(row=i+1)
Button(fen1, text = 'store everything in a list', command = super_function).grid()
fen1.mainloop()
詩作爲我是一個beginer,在我的腳本中的任何其他建議是多人歡迎:)
你一點都不離譜,謝謝你。我沒有拉姆達。這將是有用的。確實,entr只包含「None」。我沒有真正理解爲什麼。由於我的Entry數取決於number_individuals_classes,我有義務使用列表,不是嗎?我怎麼能將所有用戶輸入到列表中的信息存儲在列表中?number_individuals_classes是什麼? –
@ Remi.b Entry()是在tk窗口上創建Entry小部件的函數。因此,通過在您的程序中使用它,您可以成功創建Entry,但沒有鏈接到它的文本變量。沒有鏈接,沒有辦法(至少對我來說)提取你在Entry-中輸入的textvariable -string。 如果你想看到它簡單,輸入構件(像很多小部件)可以看到這樣的: 輸入(你把它,它是什麼掛)在你的代碼 而且很明顯,沒有鏈接部分。你只要提到它將在哪裏(fen1)並將其打包(grid(row = xx,col = xx)) – bserra
噢好吧,我明白你的意思了。但是,那麼請問爲什麼我以前工作過的腳本(我將它添加到了帖子中)?在Entry()函數中,在您定義的第一個版本中沒有這樣的鏈接(textvariable) –