基本上我有8个条目我想在循环中创建并存储在字典中,并以字符串作为键:
class foo:
entries={}
keys=[#some keys are here, type string]
#do other stuff
def create_entries(self):
for key in keys:
entries[key]=ttk.Entry(self.frame,text='sometext')
#other stuff going on
def assign(self):
f=open('file.name','r').read()
#do some fancy slicing to get the strings for the entries
for key in keys:
entries[key].insert(0,string)
现在它在这里失败了,说明了#NoneType'对象没有属性' insert'。
我想这是因为我已经将条目声明为空字典。
但是,如果我这样声明:entries={'KEY':ttk.Entry}
仍然声明没有插入' NoneType'。如果我声明它像entries={'KEY':ttk,Entry()}
那么它会在开始时初始化一个空的顶层玩家,但如果我来加载我的条目,它再次告诉我,没有插入' NoneType'。
所以我现在有点迷失..是否有可能将条目初始化为字典,然后在其中插入一些文本?或者我必须坚持每个条目作为"个别变量"?
最低工作范例:
如果我删除read-function中的打印并取消注释插入,它会告诉我:
self.entries[key].insert(0,s)
AttributeError: 'NoneType' object has no attribute 'insert'
import tkinter as tk
from tkinter import ttk
f = open('testfile.test', 'w')
f.write('A=non-relevant\nB=SomeFunnyStuff\nZ=MySecretCode:9128\n')
f.close()
class foo:
main = tk.Tk
frame = ttk.LabelFrame
keys = ['A','B','Z']
entries={}
labels={}
def read(self):
f = open('testfile.test','r').read()
for key in self.keys:
first=key+'='
if key != 'Z':
i = self.keys.index(key)+1
last='\n'+self.keys[i]+'='
s=f.split(first)[1].split(last)[0]
print(s)#self.entries[key].insert(0,s)
else:
s=f.split(first)[1]
print(s)#self.entries[key].insert(0,s)
def _quit(self):
self.main.quit()
self.main.destroy()
exit()
def run(self):
self.main.mainloop()
def __init__(self):
#init window
self.main = tk.Tk()
self.main.title('Test')
self.frame = ttk.LabelFrame(self.main, text='Try it').grid(column=0,row=0)
#init entries & labels
c,r=0,0
for key in self.keys:
s = key+'='
self.labels[key] = ttk.Label(self.frame, text=s).grid(column=c,row=r)
c+=1
self.entries[key] = ttk.Entry(self.frame,text=s).grid(column=c,row=r)
r+=1
c-=1
self.button = ttk.Button(self.frame, text='close',command=lambda:self._quit()).grid(column=0,row=r)
self.read()
print(self.entries.values())
t = foo()
t.run()
答案 0 :(得分:0)
如果有人遇到类似的问题:
根据this帖子,问题在于我如何初始化原始代码中的条目&发布的最小示例(不幸的是不在原帖中):
self.entries[key] = ttk.Entry(self.frame,text=s).grid(column=c,row=r)
向字典返回None
,.grid()
返回None
首先初始化标签和条目,然后在单独的行中使用网格,但工作正常:
self.entries[key] = ttk.Entry(self.frame,text=s)
self.entries[key].grid(column=c,row=r)
为我修好了。