gpt4 book ai didi

python - 使用 Tkinter 在未知长度的可迭代中为每个项目创建一个条目

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:04 24 4
gpt4 key购买 nike

<小时/>

查看帖子末尾的更新!

好吧,让我们看看我能否正确解释这一点。我正在使用 Tkinter 编写一个脚本,该脚本本质上将为更大的代码包设置一个配置文件。顶级弹出窗口之一将用于编辑现有记录。我想做的是创建一个顶级小部件,其中包含几个静态项目以及字典中的键/值对,我想知道是否可以创建一个小部件,其中输入框的数量取决于字典。

例如,如果我有一个包含以下内容的字典:

accounts={'abcd@gmail.com':{'pass':'password','type':'Gmail','disabled':False}}

我想要一个用于电子邮件、密码、类型和禁用设置的条目小部件,并且使用此:

accounts={'abcd@gmail.com':{'pass':'password','type':'Gmail','disabled':False, 'retries':'3'}}

与上面的相同,加上我可以通过单击按钮检索的重试选项,即:

b=Button(top, text='Save Changes', command=getvariables)
<小时/>

-----------------------------------------更新----------------- --------------

@atlassographer,你的解决方案让我走上了正轨。我对它进行了修改,直到它给出了我正在寻找的输出

here github上有完整的configui.py代码

这是最终起作用的代码的简短版本:

from Tkinter import *

accountsdict={'abcde@gmail.com':{'disabled':'True', 'type':'live','password':'pword'}}

class EditAccounts:
def __init__(self, parent, account):
self.value_list=[]
top=self.top=Toplevel(parent)
Label(top, text="Editing Account information").grid(column=0, row=0, columnspan=2, sticky='ew')
row=1
for k,v in accountsdict[account].iteritems():
var=StringVar()
var.set(v)
Label(self.top, text=k).grid(row=row, column=0)
Entry(self.top, textvariable=var).grid(row=row, column=1)
row+=1
self.value_list.append((k,var))
Button(self.top, text="Cancel", command=lambda: self.top.destroy()).grid(column=1, row=20)
Button(self.top, text="Save", command=self.save_changes).grid(column=0, row=20)

def save_changes(self):
for i in self.value_list:
print i[0], i[1].get()

class SelectAccountToEdit:
def __init__(self):
root=self.root=Tk()
Label(root, text="Select an account to edit").grid(column=0, row=0, columnspan=2)
self.accounts=Listbox(root)
for k in accountsdict.keys():
self.accounts.insert(END, k)
self.accounts.grid(column=0, row=1, rowspan=3, columnspan=2)
self.ok=Button(root, text="Select", command=self.select)
self.done=Button(root, text="Done", command=self.root.destroy)
self.ok.grid(column=0,row=4,sticky='ew')
self.done.grid(column=1,row=4,sticky='ew')
self.accounts.grid(column=0,row=1,columnspan=2,rowspan=3, sticky='ew')
mainloop()

def select(self):
acnt=self.accounts.get(self.accounts.curselection())
d=EditAccounts(self.root, acnt)
self.root.wait_window(d.top)

SelectAccountToEdit()

最佳答案

这是您想要的一些功能的简化示例。希望它能让您迈出正确的一步。我还建议查看 iterating over dictionaries 的文档和 pickle模块,非常适合轻松保存和访问字典。

def save_changes():
for i in value_list: # access the list of stringvars
print i.get() # and print the .get() method of each

root = Tk()

d = {'item1':'value1', 'item2':'value2'}
value_list = []

row=1
for k,v in d.iteritems(): # iterate over k,v in dict
var = StringVar()
var.set(v) # set var to value of dict item
Label(root, text=k).grid(row=row, column=0)
Entry(root, textvariable=var).grid(row=row, column=1)
row+=1
value_list.append(var) # append the stringvar instance to a list

Button(root, text='Save', command=save_changes).grid()

mainloop()

注意:还有其他方法可以做到这一点,甚至可能是更好的方法,并且您很可能需要进行大量调整才能使其适应您的数据和规范。这只是一个起点。

关于python - 使用 Tkinter 在未知长度的可迭代中为每个项目创建一个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23179755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com