首页 > 解决方案 > 带有键和值 tkinter 对象的字典理解

问题描述

带有键和值 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 小部件构造(我们知道我们应该使用分配的变量进行两步收缩以避免它作为 None 对象)。

我知道我可以通过

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 = {} 之前进行不必要的声明,因为我知道它只是一个虚拟对象,因为后来我将此小部件字典放入另一个字典中。

请帮忙

标签: pythondictionarytkinterlist-comprehension

解决方案


dict-comprehension的方式(难读):

from tkinter import ttk
import tkinter as tk

a_frame = tk.Tk()
dic = {
    key.grid(row=i, column=0) or key: value.grid(row=i, column=1) or value 
    for i in range(10) 
    for key, value in zip([ttk.Entry(a_frame, width=10)], [ttk.Entry(a_frame, width=10)])
}

print(dic)
a_frame.mainloop()

结果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>
}

推荐阅读