You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.3 KiB
109 lines
3.3 KiB
import tkinter as tk
|
|
import tkinter.messagebox as msgbox
|
|
import sqlite3
|
|
import datetime
|
|
|
|
def addquote(string):
|
|
"""为any加上引号"""
|
|
return "\'" + str(string) + "\'"
|
|
|
|
window = tk.Tk()
|
|
window.resizable(0, 0)
|
|
window.title("添加车辆信息")
|
|
# 窗口居中
|
|
ww, wh = 300, 300
|
|
sw, sh = window.winfo_screenwidth(), window.winfo_screenheight()
|
|
x, y = (sw - ww) / 2, (sh - wh) / 2
|
|
window.geometry("%dx%d+%d+%d" % (ww, wh, x, y))
|
|
|
|
l_Id = tk.Label(window, text="车牌号:")
|
|
l_Name = tk.Label(window, text="姓名:")
|
|
l_Color = tk.Label(window, text="颜色:")
|
|
l_Addr = tk.Label(window, text="住址:")
|
|
l_Phone = tk.Label(window, text="电话:")
|
|
|
|
# 间隔30
|
|
l_Id.place(x=10, y=20)
|
|
l_Name.place(x=10, y=50)
|
|
l_Color.place(x=10, y=80)
|
|
l_Addr.place(x=10, y=110)
|
|
l_Phone.place(x=10, y=140)
|
|
|
|
# 录入框/获得单行文本框的信息
|
|
def checkdata():
|
|
if e_Phone.get() is None: #e_Id
|
|
return False
|
|
try:
|
|
int(e_Phone.get())
|
|
return True
|
|
except ValueError:
|
|
msgbox.showwarning(message="非法输入")
|
|
return False
|
|
|
|
# 检查字符串是否由数字组成
|
|
def check_value(string):
|
|
try:
|
|
int(string)
|
|
return True
|
|
except ValueError:
|
|
return False
|
|
|
|
var_id = tk.StringVar()
|
|
var_name = tk.StringVar()
|
|
var_color = tk.StringVar()
|
|
var_addr = tk.StringVar()
|
|
var_phone = tk.StringVar()
|
|
|
|
e_Id = tk.Entry(window, width=30, textvariable=var_id)
|
|
e_Name = tk.Entry(window, width=30, textvariable=var_name)
|
|
e_Color = tk.Entry(window, width=30, textvariable=var_color)
|
|
e_Addr = tk.Entry(window, width=30, textvariable=var_addr)
|
|
e_Phone = tk.Entry(window, width=30, textvariable=var_phone,validate="focusout", invalidcommand=checkdata)
|
|
|
|
# 间隔30
|
|
e_Id.place(x=60, y=20)
|
|
e_Name.place(x=60, y=50)
|
|
e_Color.place(x=60, y=80)
|
|
e_Addr.place(x=60, y=110)
|
|
e_Phone.place(x=60, y=140)
|
|
|
|
# 按钮
|
|
def func_save():
|
|
# 检查车牌号是否为空,为空则报错 通过entry属性实现
|
|
# todo
|
|
if e_Id.get() == "":
|
|
msgbox.showwarning(message="车牌号为空")
|
|
else:
|
|
ids, name, color, addr, phone = var_id.get(), var_name.get(), var_color.get(), var_addr.get(), var_phone.get() # 获得输入的文本内容
|
|
con = sqlite3.connect("./car_info.db") # 连接数据库
|
|
cur = con.cursor() # 创建游标对象
|
|
|
|
# 获取当前时间
|
|
current_time = datetime.datetime.now()
|
|
current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
# 尝试写入,如果遇到重复则报错,确认是否需要修改
|
|
try:
|
|
cur.execute('insert into car values(?, ?, ?, ?, ?, ?)', (ids, name, color, addr, phone, current_time_str))
|
|
msgbox.showinfo(message="添加成功!")
|
|
window.quit()
|
|
except sqlite3.IntegrityError:
|
|
msgbox.showerror("⚠", "车牌号重复")
|
|
res = msgbox.askyesno("⚠", "是否需要覆盖")
|
|
if res is True:
|
|
res2 = msgbox.askokcancel("⚠", "一旦确认则无法撤销,请确认")
|
|
if res2 is True:
|
|
cur.execute("update car set name=?, color=?, addr=?, phone=?, stay_hours=? where id=?", (name, color, addr, phone, current_time_str, ids))
|
|
# else:
|
|
# window.quit()
|
|
|
|
con.commit()
|
|
cur.close()
|
|
con.close()
|
|
|
|
btn_save = tk.Button(window, text="保存", width=10, command=func_save)
|
|
btn_exit = tk.Button(window, text="退出", width=10, command=window.quit)
|
|
btn_save.place(x=110, y=220)
|
|
btn_exit.place(x=200, y=220)
|
|
|
|
window.mainloop() |