如何使用Python中的按钮查看或更新数据库列表中的单个记录?

时间:2017-03-22 22:25:01

标签: python tkinter sqlite

首先,我从表中选择所有记录并将其列在我的GUI中。 每行旁边都有两个按钮,一个用于删除记录,另一个用于在弹出屏幕中查看/更新该特定记录。我尝试了几个不同的东西,但我似乎无法从我想查看/更新的特定记录中获取信息。我试过将textvariables添加到按钮等。

我的问题是,如何查看和/或更新表格中所有行的列表中的特定行?

def Show_Keylog_Records(self):
            data = self.Select_Keylog_Records()
            for index, dat in enumerate(data):
                Row_ID = index
                Key_Num = dat[0]
                self.Row_ID = Frame(self.Result_Frame, bg='#333')
                Label(self.Row_ID, text=dat[0]).pack(side=LEFT, expand=YES, fill=X)
                Label(self.Row_ID, text=dat[1]).pack(side=LEFT, expand=YES, fill=X)
                Label(self.Row_ID, text=dat[2]).pack(side=LEFT, expand=YES, fill=X)
                Label(self.Row_ID, text=dat[3]).pack(side=LEFT, expand=YES, fill=X)
                Button(self.Row_ID, text='view', textvariable=Row_ID, command=self.View_Keylog_Record).pack(side=RIGHT)
                Button(self.Row_ID, text='Delete', command=self.Delete_Keylog_Record).pack(side=RIGHT, padx=5)
                self.Row_ID.pack(side=TOP, fill=X, pady=3)


def Select_Keylog_Records(self):
        c.execute("SELECT * FROM KeyLog")
        return c.fetchall() 

def View_Keylog_Record(self):
        Record = (Row_ID.get(),)
        c.execute('SELECT * FROM KeyLog WHERE index=?', Record)
        print c.fetchone()

1 个答案:

答案 0 :(得分:0)

我认为你需要的是将index传递给函数。如果是这样,请更改Button实例化,如下所示:

Button(self.Row_ID, text='view', command=lambda index=index: self.View_Keylog_Record(index)).pack(side=RIGHT)

Button(self.Row_ID, text='view', command=functools.partial(self.View_Keylog_Record, index)).pack(side=RIGHT)

请注意,您必须import functools才能使用第二个选项。

对删除按钮进行类似的更改,然后修改如下函数:

def View_Keylog_Record(self, index):
    c.execute('SELECT * FROM KeyLog WHERE index=?', (index,))
    print c.fetchone()

对Delete_Keylog_Record进行相应的更改,看看它是否适合您。