欢迎访问宙启技术站
智能推送

TkinterALL与数据库交互:实现数据的增删改查

发布时间:2024-01-18 16:15:14

在Tkinter中与数据库交互,可以使用Python内置的sqlite3模块来实现数据的增删改查操作。以下是一个示例代码,演示了如何在Tkinter中实现数据的增删改查。

import tkinter as tk
import sqlite3

def create_table():
    conn = sqlite3.connect("example.db")
    c = conn.cursor()
    c.execute('''CREATE TABLE IF NOT EXISTS students
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                 name TEXT NOT NULL,
                 age INTEGER NOT NULL,
                 gender TEXT NOT NULL);''')
    conn.commit()
    conn.close()

def insert_data():
    name = entry_name.get()
    age = entry_age.get()
    gender = entry_gender.get()
    
    conn = sqlite3.connect("example.db")
    c = conn.cursor()
    c.execute("INSERT INTO students (name, age, gender) VALUES (?, ?, ?)",
              (name, age, gender))
    conn.commit()
    conn.close()
    show_data()

def delete_data():
    selected_item = listbox.curselection()
    if selected_item:
        id = listbox.get(selected_item)[0]
        conn = sqlite3.connect("example.db")
        c = conn.cursor()
        c.execute("DELETE FROM students WHERE id=?", (id,))
        conn.commit()
        conn.close()
        show_data()

def update_data():
    selected_item = listbox.curselection()
    if selected_item:
        id = listbox.get(selected_item)[0]
        name = entry_name.get()
        age = entry_age.get()
        gender = entry_gender.get()
        
        conn = sqlite3.connect("example.db")
        c = conn.cursor()
        c.execute("UPDATE students SET name=?, age=?, gender=? WHERE id=?",
                  (name, age, gender, id))
        conn.commit()
        conn.close()
        show_data()

def search_data():
    search_name = entry_search.get()
    
    conn = sqlite3.connect("example.db")
    c = conn.cursor()
    c.execute("SELECT * FROM students WHERE name LIKE ?", ('%'+search_name+'%',))
    results = c.fetchall()
    conn.close()
    
    listbox.delete(0, tk.END)
    for row in results:
        listbox.insert(tk.END, row)

def show_data():
    conn = sqlite3.connect("example.db")
    c = conn.cursor()
    c.execute("SELECT * FROM students")
    results = c.fetchall()
    conn.close()
    
    listbox.delete(0, tk.END)
    for row in results:
        listbox.insert(tk.END, row)

# 创建数据库表
create_table()

# 创建Tkinter应用
root = tk.Tk()

# 创建控件
label_name = tk.Label(root, text="Name:")
label_name.grid(row=0, column=0)
entry_name = tk.Entry(root)
entry_name.grid(row=0, column=1)

label_age = tk.Label(root, text="Age:")
label_age.grid(row=1, column=0)
entry_age = tk.Entry(root)
entry_age.grid(row=1, column=1)

label_gender = tk.Label(root, text="Gender:")
label_gender.grid(row=2, column=0)
entry_gender = tk.Entry(root)
entry_gender.grid(row=2, column=1)

button_insert = tk.Button(root, text="Insert", command=insert_data)
button_insert.grid(row=3, column=0)

button_delete = tk.Button(root, text="Delete", command=delete_data)
button_delete.grid(row=3, column=1)

button_update = tk.Button(root, text="Update", command=update_data)
button_update.grid(row=3, column=2)

label_search = tk.Label(root, text="Search:")
label_search.grid(row=4, column=0)
entry_search = tk.Entry(root)
entry_search.grid(row=4, column=1)

button_search = tk.Button(root, text="Search", command=search_data)
button_search.grid(row=4, column=2)

listbox = tk.Listbox(root)
listbox.grid(row=5, column=0, columnspan=3)

# 显示数据
show_data()

# 启动Tkinter事件循环
root.mainloop()

在以上代码中,我们使用了一个名为students的数据库表,包含了idnameagegender四个字段。每当我们插入、删除、更新或搜索数据时,都是通过与数据库建立连接,执行相应的数据库操作,然后关闭连接。

使用示例代码时,我们首先要确保已经安装了sqlite3模块,并创建了名为example.db的SQLite数据库文件。然后,通过运行代码,可以看到一个基本的Tkinter应用界面,包含了输入框、按钮和列表框。我们可以在输入框中输入学生的姓名、年龄和性别,点击Insert按钮插入数据。列表框会显示数据库中的所有学生数据。我们可以选中某个学生数据,点击Delete按钮删除该学生数据,点击Update按钮更新该学生数据。我们还可以在搜索输入框中输入关键字,点击Search按钮进行模糊搜索,列表框会显示搜索结果。

通过这个示例,我们可以看到如何在Tkinter中实现数据的增删改查,以及如何与数据库交互。我们可以根据实际需求进行相应的修改和扩展,以满足更加复杂的业务需求。