【问题标题】:Get values in tkinter entry under same name在同名的 tkinter 条目中获取值
【发布时间】:2018-03-13 18:24:05
【问题描述】:

我目前有一个函数可以在单击按钮时创建 2 个输入框。这些输入框的值需要输入到数据库中。这样做的问题是,每次单击按钮时,输入框的名称都与之前的相同。这意味着如果按钮被点击两次,那么当它被提交到数据库时,只会输入最后一组框中的值。这是代码:

    def new(self):
    global ExerciseCount
    ExerciseCount = ExerciseCount + 1
    print (ExerciseCount)
    for num in range(ExerciseCount):
        self.Exercises = Entry(self.FrameExercise, bg = "PaleTurquoise1", font =("Arial","16"),  width = 20)
        self.Exercises.grid(row=2+ExerciseCount, column=1)

    global WeightCount
    WeightCount = WeightCount + 1
    print (WeightCount)
    for num in range(WeightCount):
        self.Weights = Entry(self.FrameExercise, bg = "PaleTurquoise1", font =("Arial","16"),  width = 4)
        self.Weights.grid(row=2+WeightCount, column=2)


def Update(self):
    global MemberID

    connection = sqlite3.connect(r"F:\TESTING\Program\Accounts.db")
    cursor = connection.cursor()

    Exercise = self.Exercises.get()
    Weight = self.Weights.get()
    ID = self.ent_MemberID.get()

    cursor.execute("INSERT INTO Exercises (Exercise, Weight, ID) VALUES (?,?,?)",
    (Exercise, Weight, ID,))

    connection.commit()

当点击按钮时,只有最后一组输入框被提交到数据库。这可能取决于我使用.get() 从条目中检索值,但是我不知道任何替代方案,因为我仍然只是一名学生。 我还尝试通过为它们分配一个数字来迭代输入框,但是它出现了一个错误,指出无法分配一个函数。

如果有任何方法可以获取每个输入框中的值,我将不胜感激。

【问题讨论】:

    标签: python tkinter sqlite tkinter-entry


    【解决方案1】:

    在创建文本框时尝试将它们存储在数组中。然后使用数组来访问它们。这是一个例子:

    import Tkinter as tk
    class MyApplication(tk.Frame):
        arr = []
    
        def __init__(self, master=None):
            tk.Frame.__init__(self, master)
            self.pack()
            self.createWidgets()
    
        def addTextBox(self,event):
            newtext = tk.Entry(self)
            self.arr.append(newtext)
            newtext.pack()
    
        def getValues(self,event):
            for i in range(len(self.arr)):
                print self.arr[i].get()
    
        def createWidgets(self):
            self.btnAdd = tk.Button(self)
            self.btnAdd["text"] = "Add"
            self.btnAdd.bind("<Button-1>", self.addTextBox)
            self.btnAdd.pack()  
    
            self.btnGet = tk.Button(self)
            self.btnGet["text"] = "Get"
            self.btnGet.bind("<Button-1>", self.getValues)
            self.btnGet.pack()  
    
    # main
    root = tk.Tk()
    root.minsize(width=325, height=325)
    root.maxsize(width=325, height=325)
    app = MyApplication(master=root)
    app.mainloop()
    

    【讨论】:

    • 您好,我不能使用数组,因为如果用户添加更多练习,列表的大小可能会发生变化。
    • 您不必指定大小(参见我的示例)。 append() 函数会根据需要增加数组的大小。
    • 嗨,问题是我需要获取一个变量下的条目列表,例如 Exercise 以在查询中使用。此时.get() 只访问最后一个条目
    • 看看我上面调用get()的方式。由于所有文本框都在数组中,因此您可以遍历数组并在每个文本框上调用 get()。如果您将有多个文本框,那么您需要在每个文本框上调用 get()。将它们存储在数组中更容易做到这一点,因为您可以使用数组名称并改变索引。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多