Python 具有键和值tkinter对象的词典理解

Python 具有键和值tkinter对象的词典理解,python,dictionary,tkinter,list-comprehension,Python,Dictionary,Tkinter,List Comprehension,使用键和值tkinter对象进行词典理解。tkinter对象是10个条目小部件对 我想要 dic = { ttk.Entry(a_frame, width=20).grid(row=i, column=0): ttk.Entry(a_frame, width=20).grid(row=i, column=1) for i in range(10) } 但上面的代码给出了 dic = {None: None} 我的理解是,这是一个单行tk

使用键和值tkinter对象进行词典理解。tkinter对象是10个条目小部件对

我想要

dic = {
       ttk.Entry(a_frame, width=20).grid(row=i, column=0):
       ttk.Entry(a_frame, width=20).grid(row=i, column=1)
       for i in range(10)
       }
但上面的代码给出了

dic = {None: None}
我的理解是,这是一个单行tkinter小部件构造(正如我们所知道的,我们应该使用指定的变量进行两步构造,以避免它成为无对象)

我知道我可以用传统的方式

dic = {}
for i in range(10):
    entry1 = ttk.Entry( ...).grid(row=i, column=0)
    entry2 = ttk.Entry( ...).grid(row=i, column=1)
    dic[entry1] = entry2
但是我想用字典理解来构造它,以避免在dic={}之前不必要的声明,因为我知道它只是一个伪字典,因为后来我把这个小部件字典放到了另一个字典中


请帮助了解听写理解方式(难读):

dic的结果

{
<tkinter.ttk.Entry object .!entry>: <tkinter.ttk.Entry object .!entry2>, 
<tkinter.ttk.Entry object .!entry3>: <tkinter.ttk.Entry object .!entry4>, 
<tkinter.ttk.Entry object .!entry5>: <tkinter.ttk.Entry object .!entry6>, 
<tkinter.ttk.Entry object .!entry7>: <tkinter.ttk.Entry object .!entry8>, 
<tkinter.ttk.Entry object .!entry9>: <tkinter.ttk.Entry object .!entry10>, 
<tkinter.ttk.Entry object .!entry11>: <tkinter.ttk.Entry object .!entry12>, 
<tkinter.ttk.Entry object .!entry13>: <tkinter.ttk.Entry object .!entry14>, 
<tkinter.ttk.Entry object .!entry15>: <tkinter.ttk.Entry object .!entry16>, 
<tkinter.ttk.Entry object .!entry17>: <tkinter.ttk.Entry object .!entry18>, 
<tkinter.ttk.Entry object .!entry19>: <tkinter.ttk.Entry object .!entry20>
}
{
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: 
}

听写理解方式(难读):

dic的结果

{
<tkinter.ttk.Entry object .!entry>: <tkinter.ttk.Entry object .!entry2>, 
<tkinter.ttk.Entry object .!entry3>: <tkinter.ttk.Entry object .!entry4>, 
<tkinter.ttk.Entry object .!entry5>: <tkinter.ttk.Entry object .!entry6>, 
<tkinter.ttk.Entry object .!entry7>: <tkinter.ttk.Entry object .!entry8>, 
<tkinter.ttk.Entry object .!entry9>: <tkinter.ttk.Entry object .!entry10>, 
<tkinter.ttk.Entry object .!entry11>: <tkinter.ttk.Entry object .!entry12>, 
<tkinter.ttk.Entry object .!entry13>: <tkinter.ttk.Entry object .!entry14>, 
<tkinter.ttk.Entry object .!entry15>: <tkinter.ttk.Entry object .!entry16>, 
<tkinter.ttk.Entry object .!entry17>: <tkinter.ttk.Entry object .!entry18>, 
<tkinter.ttk.Entry object .!entry19>: <tkinter.ttk.Entry object .!entry20>
}
{
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: , 
: 
}

虽然这可能有效,但我不建议您使用它。它可以按预期工作。您的代码帮助我减少了大量冗长的代码行,避免了不必要的名称创建,并使模块更易于阅读。这也让我看到了“or”操作符、zip函数的用法,我们可以在第一个“for”之后做进一步的说明。谢谢。但是回应你上面的陈述,你能告诉我为什么不使用这个吗?@KokoEfraim使用
zip
并在dict-comprehension中创建一个列表浪费了不必要的开销。而且它有点难读……虽然这可能行得通,但我不建议你使用它。它按预期工作。您的代码帮助我减少了大量冗长的代码行,避免了不必要的名称创建,并使模块更易于阅读。这也让我看到了“or”操作符、zip函数的用法,我们可以在第一个“for”之后做进一步的说明。谢谢。但是回应你上面的陈述,你能告诉我为什么不使用这个吗?@KokoEfraim使用
zip
并在dict中创建一个列表浪费了不必要的开销。而且它有点难读……使用一个函数,例如
create_entry(row,col…)
来创建条目,网格化条目并返回条目。然后使用
dic={create_entry(i,0,…):create_entry(i,1,…)for i in range(10)}
。我已经尝试了你的建议。是的,它创建了dic字典,但未能构建一对条目小部件(它只创建了一个条目小部件,并且它存在错误-因此被隐藏,只有在运行另一个正确的tkinter窗口(我使用Anaconda 3)后,我们才能看到它)。使用一个函数,例如
create_entry(row,col,…)
要创建条目,将条目网格化并返回条目。然后使用
dic={create_entry(i,0,…):create_entry(i,1,…)for i in range(10)}
。我已经尝试了您的建议。是的,它创建了dic字典,但无法构建这对条目小部件(它只创建了一个条目小部件,并且它是错误的-因此被隐藏,只有在运行另一个正确的tkinter窗口(我使用Anaconda 3)后我们才能看到它)。