由于需要连接数据库和进行数据库操作,需要安装MySQL的Python驱动程序,可以使用pip install mysql-connector-python命令进行安装。

下面是一个简单的实现增删改查功能的窗口程序,其中使用了tkinter库来创建窗口和按钮,使用mysql.connector库来连接和操作MySQL数据库。

import tkinter as tk
import mysql.connector

class Database:
    def __init__(self):
        self.conn = mysql.connector.connect(
            host="localhost",
            user="root",
            password="password",
            database="test"
        )
        self.cursor = self.conn.cursor()
        self.create_table()

    def create_table(self):
        self.cursor.execute("CREATE TABLE IF NOT EXISTS people (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), id_card VARCHAR(255), gender VARCHAR(255), phone VARCHAR(255), address VARCHAR(255), rank VARCHAR(255), marital_status VARCHAR(255), ethnic VARCHAR(255), political_status VARCHAR(255), age INT)")

    def insert(self, name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age):
        sql = "INSERT INTO people (name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"
        val = (name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age)
        self.cursor.execute(sql, val)
        self.conn.commit()

    def select_all(self):
        self.cursor.execute("SELECT * FROM people")
        return self.cursor.fetchall()

    def delete(self, id):
        sql = "DELETE FROM people WHERE id = %s"
        val = (id, )
        self.cursor.execute(sql, val)
        self.conn.commit()

    def update(self, id, name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age):
        sql = "UPDATE people SET name = %s, id_card = %s, gender = %s, phone = %s, address = %s, rank = %s, marital_status = %s, ethnic = %s, political_status = %s, age = %s WHERE id = %s"
        val = (name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age, id)
        self.cursor.execute(sql, val)
        self.conn.commit()

class Application:
    def __init__(self, master):
        self.master = master
        self.db = Database()
        self.create_widgets()

    def create_widgets(self):
        self.name_label = tk.Label(self.master, text="姓名")
        self.name_label.grid(row=0, column=0)
        self.name_entry = tk.Entry(self.master)
        self.name_entry.grid(row=0, column=1)

        self.id_card_label = tk.Label(self.master, text="身份证号")
        self.id_card_label.grid(row=1, column=0)
        self.id_card_entry = tk.Entry(self.master)
        self.id_card_entry.grid(row=1, column=1)

        self.gender_label = tk.Label(self.master, text="性别")
        self.gender_label.grid(row=2, column=0)
        self.gender_entry = tk.Entry(self.master)
        self.gender_entry.grid(row=2, column=1)

        self.phone_label = tk.Label(self.master, text="联系电话")
        self.phone_label.grid(row=3, column=0)
        self.phone_entry = tk.Entry(self.master)
        self.phone_entry.grid(row=3, column=1)

        self.address_label = tk.Label(self.master, text="户籍地址")
        self.address_label.grid(row=4, column=0)
        self.address_entry = tk.Entry(self.master)
        self.address_entry.grid(row=4, column=1)

        self.rank_label = tk.Label(self.master, text="警衔")
        self.rank_label.grid(row=5, column=0)
        self.rank_entry = tk.Entry(self.master)
        self.rank_entry.grid(row=5, column=1)

        self.marital_status_label = tk.Label(self.master, text="婚姻状况")
        self.marital_status_label.grid(row=6, column=0)
        self.marital_status_entry = tk.Entry(self.master)
        self.marital_status_entry.grid(row=6, column=1)

        self.ethnic_label = tk.Label(self.master, text="民族")
        self.ethnic_label.grid(row=7, column=0)
        self.ethnic_entry = tk.Entry(self.master)
        self.ethnic_entry.grid(row=7, column=1)

        self.political_status_label = tk.Label(self.master, text="政治面貌")
        self.political_status_label.grid(row=8, column=0)
        self.political_status_entry = tk.Entry(self.master)
        self.political_status_entry.grid(row=8, column=1)

        self.age_label = tk.Label(self.master, text="年龄")
        self.age_label.grid(row=9, column=0)
        self.age_entry = tk.Entry(self.master)
        self.age_entry.grid(row=9, column=1)

        self.add_button = tk.Button(self.master, text="添加", command=self.add_person)
        self.add_button.grid(row=10, column=0)

        self.edit_button = tk.Button(self.master, text="修改", command=self.edit_person)
        self.edit_button.grid(row=10, column=1)

        self.delete_button = tk.Button(self.master, text="删除", command=self.delete_person)
        self.delete_button.grid(row=10, column=2)

        self.result_label = tk.Label(self.master, text="")
        self.result_label.grid(row=11, column=0, columnspan=3)

        self.show_button = tk.Button(self.master, text="显示全部", command=self.show_people)
        self.show_button.grid(row=12, column=0, columnspan=3)

    def add_person(self):
        name = self.name_entry.get()
        id_card = self.id_card_entry.get()
        gender = self.gender_entry.get()
        phone = self.phone_entry.get()
        address = self.address_entry.get()
        rank = self.rank_entry.get()
        marital_status = self.marital_status_entry.get()
        ethnic = self.ethnic_entry.get()
        political_status = self.political_status_entry.get()
        age = self.age_entry.get()

        if name and id_card and gender and phone and address and rank and marital_status and ethnic and political_status and age:
            self.db.insert(name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age)
            self.result_label.config(text="添加成功")
        else:
            self.result_label.config(text="请输入完整信息")

    def edit_person(self):
        id = self.get_selected_id()
        if not id:
            self.result_label.config(text="请选择要修改的记录")
            return

        name = self.name_entry.get()
        id_card = self.id_card_entry.get()
        gender = self.gender_entry.get()
        phone = self.phone_entry.get()
        address = self.address_entry.get()
        rank = self.rank_entry.get()
        marital_status = self.marital_status_entry.get()
        ethnic = self.ethnic_entry.get()
        political_status = self.political_status_entry.get()
        age = self.age_entry.get()

        if name and id_card and gender and phone and address and rank and marital_status and ethnic and political_status and age:
            self.db.update(id, name, id_card, gender, phone, address, rank, marital_status, ethnic, political_status, age)
            self.result_label.config(text="修改成功")
        else:
            self.result_label.config(text="请输入完整信息")

    def delete_person(self):
        id = self.get_selected_id()
        if not id:
            self.result_label.config(text="请选择要删除的记录")
            return

        self.db.delete(id)
        self.result_label.config(text="删除成功")

    def show_people(self):
        people = self.db.select_all()
        if people:
            result = "id\t姓名\t身份证号\t性别\t联系电话\t户籍地址\t警衔\t婚姻状况\t民族\t政治面貌\t年龄\n"
            for person in people:
                result += "{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\t{}\n".format(*person)
            self.result_label.config(text=result)
        else:
            self.result_label.config(text="暂无记录")

    def get_selected_id(self):
        selection = self.result_label.selection_get()
        if selection:
            return int(selection.split("\t")[0])
        else:
            return None

if __name__ == "__main__":
    root = tk.Tk()
    root.title("数据库操作")
    app = Application(root)
    root.mainloop()

程序运行后会弹出一个窗口,界面中包含各个信息的输入框和添加、修改、删除、显示全部等按钮,以及用于显示操作结果的标签。

输入完整信息后,点击添加按钮会将信息插入到数据库中。点击修改按钮会根据当前选中的记录的ID,将数据库中对应的记录更新为当前输入的信息。点击删除按钮会根据当前选中的记录的ID,将数据库中对应的记录删除。点击显示全部按钮会将数据库中的所有记录显示在标签中。

注意,由于程序中使用了root.mainloop()方法来进入Tkinter的主循环,因此需要在if name == "main":语句中创建root窗口并调用Application类的构造函数来启动程序

用python制作一个窗口通过按钮将MySQL中数据库的一个表进行增删改查功能数据库信息包括姓名身份证号性别联系电话户籍地址警衔婚姻状况民族政治面貌年龄

原文地址: https://www.cveoy.top/t/topic/e8IO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录