添加多个条目并动态从中检索数据 [英] Add multiple Entries and retrieve data from them dynamically

查看:26
本文介绍了添加多个条目并动态从中检索数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法动态添加多个条目并从中获取值?

Is there any way to add multiple Entries dynamically and get values from them?

就像在下面的示例中,如果我单击显示数据"按钮,所有数据都显示在不同的条目中.现在,如果我更改任何条目中的数据,如何获取更新的数据并将它们保存到 Values 数组?

Like in the example below if I click Show Data button all data is shown in different Entries. Now if I change data in any of the Entries how can I get the updated data and save them to Values array?

from tkinter import *
from tkinter import ttk

class Root(Tk):

    def __init__(self):
        super(Root, self).__init__()
        self.createMultipleEntries()

    def createMultipleEntries(self):
        self.values = [
            ["Full Name", "Email", "Phone", "Street Address", "Job Title"],
            ["Alex Blackater", "ablackater0@wordpress.org", "507-340-8136", "81604 Moose Park", "Senior Financial Analyst"],
            ["Alvy Chartres", "achartres1@linkedin.com", "926-801-1685", "4 Sundown Place", "Executive Secretary"],
            ["Juieta Train", "jtrain2@ucoz.com", "861-881-9312", "953 Hintze Circle", "Professor"],
            ["Basil Effemy", "beffemy3@liveinternet.ru", "156-293-8817", "115 Brentwood Trail", "Research Associate"],
            ["Asher MacAllister", "amacallister4@t-online.de", "263-605-8166", "8672 Stoughton Road", "Software Engineer II"]
        ]

        self.label_frame = ttk.LabelFrame(self)
        self.label_frame.pack()

        self.button_show = ttk.Button(self.label_frame, text="Show Data", command=self.onShowButtonClick)
        self.button_show.grid(row=0, column=0)
        self.button_update = ttk.Button(self.label_frame, text="Update Data", command=self.onUpdateButtonClick)
        self.button_update.grid(row=0, column=1)

    def onShowButtonClick(self):
        self.values_length = len(self.values)
        for i in range(1, self.values_length):
            entry_full_name = ttk.Entry(self.label_frame)
            entry_full_name.grid(row=i, column=0)
            entry_full_name.insert(0, self.values[i][0])

            entry_email = ttk.Entry(self.label_frame)
            entry_email.grid(row=i, column=1)
            entry_email.insert(0, self.values[i][1])

            entry_phone = ttk.Entry(self.label_frame)
            entry_phone.grid(row=i, column=2)
            entry_phone.insert(0, self.values[i][2])

            entry_street_address = ttk.Entry(self.label_frame)
            entry_street_address.grid(row=i, column=3)
            entry_street_address.insert(0, self.values[i][3])

            entry_job_title = ttk.Entry(self.label_frame)
            entry_job_title.grid(row=i, column=4)
            entry_job_title.insert(0, self.values[i][4])

    def onUpdateButtonClick(self):
        pass

def main():
    root = Root()
    root.mainloop()

if __name__ == '__main__':
    main()

有没有办法动态设置如下内容?

Is there any way to set something like below dynamically?

entery_variable = StringVar()

entry_ = ttk.Entry(self.label_frame, textvariable=entery_variable)
entry_.grid(row=i, column=0)

print(entry_variable.get())

提前致谢.:)

推荐答案

关于更新你的 values 数组,这是我想到的.

Regarding updating your values array, here is what I came up with.

我将所有条目存储在一个列表中,以便我可以通过其 2D 索引 (i,j) 来引用它.当您单击更新按钮时,它会从所有条目中获取值并更新值数组.这是代码.

I stored all the entries in a list, so that I can refer to it by its 2D index (i,j). When you click the update button, it gets the values from all the entries and updates the values array. Here is the code.

from tkinter import *
from tkinter import ttk

class Root(Tk):

    def __init__(self):
        super(Root, self).__init__()
        self.createMultipleEntries()

    def createMultipleEntries(self):
        self.values = [
            ["Full Name", "Email", "Phone", "Street Address", "Job Title"],
            ["Alex Blackater", "ablackater0@wordpress.org", "507-340-8136", "81604 Moose Park", "Senior Financial Analyst"],
            ["Alvy Chartres", "achartres1@linkedin.com", "926-801-1685", "4 Sundown Place", "Executive Secretary"],
            ["Juieta Train", "jtrain2@ucoz.com", "861-881-9312", "953 Hintze Circle", "Professor"],
            ["Basil Effemy", "beffemy3@liveinternet.ru", "156-293-8817", "115 Brentwood Trail", "Research Associate"],
            ["Asher MacAllister", "amacallister4@t-online.de", "263-605-8166", "8672 Stoughton Road", "Software Engineer II"]
        ]

        self.label_frame = ttk.LabelFrame(self)
        self.label_frame.pack()

        self.button_show = ttk.Button(self.label_frame, text="Show Data", command=self.onShowButtonClick)
        self.button_show.grid(row=0, column=0)
        self.button_update = ttk.Button(self.label_frame, text="Update Data", command=self.onUpdateButtonClick)
        self.button_update.grid(row=0, column=1)

        self.entryList = []

    def onShowButtonClick(self):
        self.values_length = len(self.values)
        for i in range(1, self.values_length):
            entry_full_name = ttk.Entry(self.label_frame)
            entry_full_name.grid(row=i, column=0)
            entry_full_name.insert(0, self.values[i][0])

            entry_email = ttk.Entry(self.label_frame)
            entry_email.grid(row=i, column=1)
            entry_email.insert(0, self.values[i][1])

            entry_phone = ttk.Entry(self.label_frame)
            entry_phone.grid(row=i, column=2)
            entry_phone.insert(0, self.values[i][2])

            entry_street_address = ttk.Entry(self.label_frame)
            entry_street_address.grid(row=i, column=3)
            entry_street_address.insert(0, self.values[i][3])

            entry_job_title = ttk.Entry(self.label_frame)
            entry_job_title.grid(row=i, column=4)
            entry_job_title.insert(0, self.values[i][4])

            self.entryList.append([entry_full_name, entry_email, entry_phone, entry_street_address, entry_job_title])

    def onUpdateButtonClick(self):
        for i in range(1, len(self.values)):
            for j in range(len(self.values[0])):
                self.values[i][j] = self.entryList[i-1][j].get()
        # print(self.values)

def main():
    root = Root()
    root.mainloop()

if __name__ == '__main__':
    main()

附言不过,我真的很想知道,如果我做的是矫枉过正!

P.S. I would really like to know though, if what I did is an overkill !

这篇关于添加多个条目并动态从中检索数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆