使用数据库远比使用text文本记录数据方便、简单、代码也简洁,少
运行截图:
代码复制粘贴后只要修改一下自己数据库的用户名和密码就可以使用了
贴代码~
import tkinter
import tkinter.messagebox
import pymysql
class MainForm:
def __init__(self):
root = tkinter.Tk()# 根窗体
# 标题名称
root.title('通讯录')
# 设置窗体初始大小
root.geometry("650x550")
# 设置窗体不可拉升
root.resizable(width=False, height=False)
# ---------------设置数据库----------------
# 连接数据库
conn = pymysql.connect(
host='localhost',
user='root',#数据库用户名
password='*****',#数据库密码
port=3306,
charset='utf8'
)
# 获得游标
cursor = conn.cursor()
# 创建数据库-phonebook
sql_creat = "create database if not exists phonebook"
cursor.execute(sql_creat)
# 创建数据表-phonebook,并设定相关属性--名字,号码,邮箱,地址
sql_use = 'use phonebook'
cursor.execute(sql_use)
sql_table = 'create table if not exists perinfo(perName varchar(20) primary key,' \
'perNumber varchar(10) not null,' \
'perEmail varchar(20) not null,' \
'perAddress varchar(45) not null )'
cursor.execute(sql_table)
# 添加新联系人
def handler_1(event):
def newinfo(event):
name = name_str.get()
phone = phone_num.get()
mail = mail_adr.get()
address = adr_str.get()
if name == "" or phone == "" or mail == "" or address == "":
tkinter.messagebox.showerror('错误', '所填信息不能为空')
else:
# 向数据库插入一条记录 ,字符串和数字的区别:values(%d , '%s')
sql = "insert into perinfo(perName, perNumber, perEmail, perAddress) values ('%s','%s','%s','%s')"
data = (name, phone, mail, address)
# data = ('小张',151, '325767@qq.com', '南昌')
# data = (name_str.get(), phone_num.get(), mail_adr.get(), adr_str.get())
cursor.execute(sql % data)
conn.commit()
# 弹出注册成功消息框
tkinter.messagebox.showinfo('消息提示框', f'添加“{
name}“为联系人成功!')
# 注册成功关闭注册框
window_add.destroy()
# 新建注册界面
window_add = tkinter.Toplevel(root)
window_add.geometry('300x300')
window_add.title('注册')
# 姓名
name_str = tkinter.StringVar()
tkinter.Label(window_add, text='请输入姓 名:').place(x=10, y=10)
tkinter.Entry(window_add, textvariable=name_str).place(x=110, y=10)
# 手机号
phone_num = tkinter.StringVar()
tkinter.Label(window_add, text='请输入手机号:').place(x=10, y=50)
tkinter.Entry(window_add, textvariable=phone_num).place(x=110, y=50)
# 邮箱
mail_adr = tkinter.StringVar()
tkinter.Label(window_add, text='请输入邮 箱:').place(x=10, y=90)
tkinter.Entry(window_add, textvariable=mail_adr).place(x