Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python和Tkinter。使用Entry.get构建列表的列表_Python_Python 2.7_Tkinter - Fatal编程技术网

python和Tkinter。使用Entry.get构建列表的列表

python和Tkinter。使用Entry.get构建列表的列表,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,下面的脚本要求用户输入并打开一个窗口。然后我想从窗口获取信息,并将它们放入列表或类似的列表中,以便创建类“Parameter”的对象。除了我尝试用Entry提取数据外,其他一切都正常。开始将它们放入列表中 class Parameter (object): def __init__(self,number_individuals_classes,payoff): self.nb_classes = number_individuals_classes se

下面的脚本要求用户输入并打开一个窗口。然后我想从窗口获取信息,并将它们放入列表或类似的列表中,以便创建类“Parameter”的对象。除了我尝试用Entry提取数据外,其他一切都正常。开始将它们放入列表中

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()

由于我是一个新手,任何关于我剧本的建议都是非常受欢迎的:)

我不确定你打算怎么做,看起来你想在每个“单独的类”之间建立某种交互矩阵,但我可能错了

首先,您的函数没有任何参数(get_payoff()),因为您希望它从entr中提取一些内容,我假设您希望将entr作为函数的参数! 比如:

Button(fen1,text='Done', command=lambda : get_payoff(entr)).grid()
当按钮最初在GUI中创建时,“lambda”将允许在不调用的情况下使用该函数

第二,当我执行(修改后)时,我得到了一个错误,因为在函数中,您将尝试使用无类型变量执行get()。您要提取数据的变量“entr”只包含无类型,而不包含Entry小部件中的textvariables。原因是您不能在这样的数组中存储小部件。每次要创建条目时,必须创建一个变量(textvariable),该变量将作为指向该条目的链接:

# a is a string variable
a = StrVar()
# which is linked to the Entry "test"
test = Entry(window, textvariable = a)
# get the variable in Entry "test"
b = test.get()
# print on screen the result
print b

我不知道这对你是否有帮助,或者我是否完全偏离了主题。

我不确定你打算怎么做,似乎你想在每个“个体类”之间建立某种互动矩阵,但我可能错了

首先,您的函数没有任何参数(get_payoff()),因为您希望它从entr中提取一些内容,我假设您希望将entr作为函数的参数! 比如:

Button(fen1,text='Done', command=lambda : get_payoff(entr)).grid()
当按钮最初在GUI中创建时,“lambda”将允许在不调用的情况下使用该函数

第二,当我执行(修改后)时,我得到了一个错误,因为在函数中,您将尝试使用无类型变量执行get()。您要提取数据的变量“entr”只包含无类型,而不包含Entry小部件中的textvariables。原因是您不能在这样的数组中存储小部件。每次要创建条目时,必须创建一个变量(textvariable),该变量将作为指向该条目的链接:

# a is a string variable
a = StrVar()
# which is linked to the Entry "test"
test = Entry(window, textvariable = a)
# get the variable in Entry "test"
b = test.get()
# print on screen the result
print b

我不知道这是否对您有帮助,或者我是否完全偏离了主题。

第一个也是最重要的问题是,您将调用
网格的结果(始终为
)附加到列表中,而不是小部件:

focal_txts.append(Label(fen1,...).grid(...))
# ...
这应该是:

focal_label = Label(fen1,...)
focal_label.grid(...)
focal_txts.append(focal_label)
此外,您正试图将
payoff
用作全局变量,但在回调函数中使用它之前,没有全局名称
payoff
。因此,当您尝试将其用作
参数的构造函数的参数时,它不在同一范围内


一般来说,如果使用类,可以改进小部件的创建,并且代码的组织也会更好

第一个也是最重要的问题是,您将调用
网格
(始终为
)的结果附加到列表中,而不是小部件:

focal_txts.append(Label(fen1,...).grid(...))
# ...
这应该是:

focal_label = Label(fen1,...)
focal_label.grid(...)
focal_txts.append(focal_label)
此外,您正试图将
payoff
用作全局变量,但在回调函数中使用它之前,没有全局名称
payoff
。因此,当您尝试将其用作
参数的构造函数的参数时,它不在同一范围内


一般来说,如果使用类,可以改进小部件的创建,并且代码的组织也会更好

你一点也不过分,斯贝塞拉。我不喜欢lambda。这将是有用的。事实上,entr只包含“None”。我真的不明白为什么。由于我的参赛人数取决于个人和班级的数量,我不得不使用一个列表,不是吗?我如何存储用户将在列表中的条目中输入的所有信息?无论数量是多少?个人数是多少?类数是多少?@Remi.b Entry()是用于在tk窗口上创建条目小部件的函数。因此,通过在程序中使用它,您成功地创建了条目,但没有与之链接的textvariable。如果没有链接,就无法(至少对我来说)提取您在条目中键入的textvariable字符串。如果您想简单地看到它,条目小部件(像许多小部件一样)可以这样看:条目(您把它放在哪里,它链接到了什么)显然在您的代码中没有链接部分。你只要提到它的位置(fen1)并打包(grid(row=xx,col=xx))哦,好的,我明白你的意思了。但是,我可以问一下,为什么我之前的脚本有效(我把它添加到了帖子中)?在Entry()函数中没有这样的链接(textvariable),在第一个版本中,您将entr定义为:entr.append((Entry(fen1).grid(row=xx,col=xx)),而在第二个版本中:entr.append((Entry(fen1)),区别在于在第一个版本中您创建了小部件,因此网格()的结果方法是None。第二个方法是将小部件本身存储到一个表中,然后创建它(因此可以在不定义textvariable的情况下获取()值)好的,我现在明白了所有的事情!非常感谢你的帮助和解释。你一点也不离谱,thks bserra。我没有lambda。thks会有用的。事实上,entr只包含“None”.我真的不明白为什么。由于我的条目数量取决于个人和班级的数量,我不得不使用一个列表,不是吗?我如何将用户将在条目中输入的所有信息存储在一个列表中