【问题标题】:how to .get() all entry box insert into sqlite 3 in python tkinter如何在python tkinter中将.get()所有输入框插入sqlite 3
【发布时间】:2021-11-23 06:47:48
【问题描述】:

如何在 python tkinter 中 .get() 将所有输入框插入到 sqlite 3 中

我有创建循环输入框

我已经尝试了所有输入框 .get() 并插入到 sqlite 3

但只插入最后三个输入框

我已将所有框插入 sqlite 3

所有输入框都以单行方式插入到 sqlite 3 中

import sqlite3

#------------------------------------
class sample:
    def __init__(self, root):
        self.root = root


        self.all_entries = []

        showButton = Button(root, text='Show all text', command=self.showEntries)
        showButton.pack()

        addboxButton = Button(root, text='<Add Time Input>', fg="Red", command=self.addBox)
        addboxButton.pack()


        savee = Button(root, text='Save', fg="green", command=self.save)
        savee.pack()

    def save(self):

        print(self.all_entries)
        con = sqlite3.connect(database=r'data.db')
        cur = con.cursor()

        cur.execute("Insert into e_transations (sl,id,datee) values(?,?,?)", (
            self.ent1.get(), self.ent2.get(), self.ent3.get()
        ))
        con.commit()

    def addBox(self):

        frame = Frame(root)
        frame.pack()

        Label(frame, text='From').grid(row=0, column=0)

        self.ent1 = Entry(frame)
        self.ent1.grid(row=1, column=0)

        Label(frame, text='To').grid(row=0, column=1)

        self.ent2 = Entry(frame)
        self.ent2.grid(row=1, column=1)

        self.ent3 = Entry(frame)
        self.ent3.grid(row=1, column=2)

        self.all_entries.append((self.ent1, self.ent2,self.ent3))

    # ------------------------------------

    def showEntries(self):
        for number, (self.ent1,self.ent2,self.ent3) in enumerate(self.all_entries):
            print(number, self.ent1.get(), self.ent2.get(), self.ent3.get())

    # ------------------------------------


root = Tk()
obj = sample(root)
root.mainloop()

【问题讨论】:

  • ent1ent2ent3好像是临时变量,为什么要用实例变量呢?

标签: python sqlite tkinter


【解决方案1】:

save() 应该保存self.all_entries 中所有条目的值,而不仅仅是最后一个self.ent1self.ent2self.ent3

    def save(self):

        print(self.all_entries)
        con = sqlite3.connect(database=r'data.db')
        cur = con.cursor()

        values = [[entry.get for entry in entry_set] for entry_set in self.all_entries]

        cur.executemany("Insert into e_transations (sl,id,datee) values(?,?,?)", values)
        con.commit()

self.all_entries 应该包含来自条目小部件的.get() 的值,而不是

【讨论】:

  • self.all_entries 不能直接作为必需的参数传递,因为它是 Entry 小部件的列表。所需的参数是这些条目中的值列表。此外,如果列表中有超过 3 个条目,例如6或9个条目,它不起作用。
  • 我看错了,当它推入self.all_entries时,我以为它在条目上使用了.get()
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 2017-11-06
  • 2014-06-09
  • 2020-10-21
  • 2018-12-12
  • 2016-06-10
  • 1970-01-01
  • 2012-04-19
相关资源
最近更新 更多