代码之家  ›  专栏  ›  技术社区  ›  Partho63 BASANT KUMAR

添加多个条目并从中动态检索数据

  •  1
  • Partho63 BASANT KUMAR  · 技术社区  · 7 年前

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

    如下面的示例所示,如果我单击“显示数据”按钮,所有数据将显示在不同的条目中。现在,如果我更改任何条目中的数据,如何获取更新的数据并将其保存到值数组?

    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()
    

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

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

    提前感谢。:)

    2 回复  |  直到 7 年前
        1
  •  3
  •   Miraj50 user2991863    7 年前

    关于更新您的值数组,下面是我的想法。

    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()
    

    顺便说一句,我真的很想知道,我所做的是不是太过分了!

        2
  •  1
  •   figbeam    7 年前

    我不清楚您希望它如何工作,但这里有一个想法:将每个条目绑定到一个对 返回

    def onShowButtonClick(self):
        self.values_length = len(self.values)
        for i in range(1, self.values_length):
    
            # creating the entrys...
    
            entry_full_name.bind('<Return>', self.change)
            entry_email.bind('<Return>', self.change)
            entry_phone.bind('<Return>', self.change)
            entry_street_address.bind('<Return>', self.change)
            entry_job_title.bind('<Return>', self.change)
    
    def change(self, event):
        print(event.widget.get())
    

    如果您希望条目捕捉每个条目的实际变化,则应将它们与 StringVar() 在创建时,然后使用 trace

    推荐文章