前言

今天我们继续设计电话簿,主要是结合数据库和 GUI 将项目完成。

代码汇总

import tkinter as tk
import os
import sqlite3# 界面对象的基本参数设置
root = tk.Tk()
root.title("电话簿")
root.geometry('1096x474+250+250')
# 设置界面是否可以随意拉伸
# root.resizable(False, False)all_data = []
check_index = 0# 本脚本名称
scriptPath = __file__
# scriptName = os.path.basename(__file__)
# 数据库创建路径
DBName = "\phoneNumberDB.db"
DBPath = os.path.split(os.path.realpath(__file__))[0] + DBNamedef create_database():"""创建数据 ProjectDataBase.db"""conn = sqlite3.connect(DBPath)conn.close()print('** 创建数据库 %s 成功! **' % DBName)create_tables()def create_tables():"""创建数据库表"""conn = sqlite3.connect(DBPath)c = conn.cursor()# 执行 DDL 语句创建 class_tablec.execute("""create table phoneNumber_table(ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,Name varchar(20),Number char(11),Email char(30),Note text)""")# 关闭游标c.close()# 关闭连接conn.close()def Insert_data(dataTuple=()):"""插入数据"""conn = sqlite3.connect(DBPath)c = conn.cursor()# c.execute('PRAGMA foreign_keys = ON;')c.execute('insert into phoneNumber_table values(?, ?, ? ,? ,?)',dataTuple)conn.commit()c.close()conn.close()print('插入数据:', dataTuple, '成功!')def check_data():"""查看电话簿中数据"""conn = sqlite3.connect(DBPath)c = conn.cursor()# c.execute('PRAGMA foreign_keys = ON;')c.execute('select ID, Name, Number, Email, Note from phoneNumber_table')while True:row = c.fetchone()if not row:breakall_data.append(row)c.close()conn.close()print('查看数据成功!')return all_datadef draw():"""设计界面"""def show_data():s = ""for i in all_data:s += str(i) + "\n\n"return s# 放置多行文本text = tk.Text(root)text.grid(row=0, column=0, rowspan=3, columnspan=3)text.insert("insert", show_data())v = tk.StringVar()# 详细信息label = tk.Label(root, textvariable=v)label.grid(row=0, column=3, columnspan=3, rowspan=2)v.set(str(all_data[check_index]))def InsertBtn_command(btn=None):passdef lastOneBtn_command(btn=None):global check_indexcheck_index -= 1v.set(str(all_data[check_index]))def NextBtn_command(btn=None):global check_indexcheck_index += 1v.set(str(all_data[check_index]))# 按钮key = NonelastOneBtn = tk.Button(root,text="上一个",relief=tk.GROOVE,command=lambda idx=key: lastOneBtn_command(idx))lastOneBtn.grid(row=2, column=3)InsertBtn = tk.Button(root,text="插入",relief=tk.GROOVE,command=lambda idx=key: InsertBtn_command(idx))InsertBtn.grid(row=2, column=4)NextBtn = tk.Button(root,text="下一个",relief=tk.GROOVE,command=lambda idx=key: NextBtn_command(idx))NextBtn.grid(row=2, column=5)if __name__ == "__main__":# create_database()# Insert_data(dataTuple=(None, '王催化', '123-456', 'xxx@gmail.com', ''))# Insert_data(dataTuple=(None, 'xxx', '123-456', 'xxx@gmail.com', ''))# Insert_data(dataTuple=(None, 'yyy', '123-456', 'xxx@gmail.com', ''))# Insert_data(dataTuple=(None, 'zzz', '123-456', 'xxx@gmail.com', ''))check_data()draw()root.mainloop()

所做的工作

数据结构

all_data = []
check_index = 0

all_data 存储了数据库中的每条信息,类似下面的样式。

[(1, '王催化', '123-456', 'xxx@gmail.com', ''),(2, 'xxx', '123-456', 'xxx@gmail.com', '')]

check_index 代表了右侧当前显示的是哪一条内容。

功能说明

create_database()
Insert_data(dataTuple=(None, '王催化', '123-456', 'xxx@gmail.com', ''))
Insert_data(dataTuple=(None, 'xxx', '123-456', 'xxx@gmail.com', ''))
Insert_data(dataTuple=(None, 'yyy', '123-456', 'xxx@gmail.com', ''))
Insert_data(dataTuple=(None, 'zzz', '123-456', 'xxx@gmail.com', ''))
check_data()
draw()
root.mainloop()

开始运行的时候,需要创建数据库,插入数据。
运行 check_data() 会遍历所有的数据库内容,保存到 all_data 数据结构中。

    def lastOneBtn_command(btn=None):global check_indexcheck_index -= 1v.set(str(all_data[check_index]))

上一个、下一个按钮会改变 check_index 的值,从而改变右侧当前结果。

运行截图

后记

以上就是我们今天的内容,我们的电话簿就完成了,但是还有很多功能我们还没有涉及到,毕竟我们这个项目的目的就是将 GUI 和 数据库结合起来。

【案例】做一个电话簿(四)相关推荐

  1. 案例-做一个酒店预定小程序用的日期选择案例

    今天给大家分享一个酒店预定小程序用的日期选择案例,我是做的支付宝小程序,如果需要应用到微信小程序,请将相关字眼改成微信用的字眼,比如onTap改bindtap,a:if或者a:for改成wx:if和w ...

  2. 网络爬虫---用urllib模块爬取京东笔记本电脑的数据、并对其做一个可视化

    用urllib模块爬取京东笔记本电脑的数据.并对其做一个可视化 文章目录 用urllib模块爬取京东笔记本电脑的数据.并对其做一个可视化 一.前言 二.知识要求 三.过程分析 1.观察主页面和每个电脑 ...

  3. 用CSS来做一个动画案例

    今天来做这么一个案例 添加一个动画实现上下渐变滚动的效果 首先还是我们HTML部分,一个大盒子装着五个子元素 下面别在意,之前写的时候看到有个网站有这么个注解我就复制了下来哈哈哈 <div cl ...

  4. vue实战案例:用学过的知识做一个小demo

    学过了前面11个章节的知识,可以说你已经对vue2.0的基础知识有了一定程度的掌握,虽然在真正开发过程中,一些知识的使用会稍有不同,但是别慌,我们会把那部分内容在进阶系列,比如:单文件组件,过渡效果, ...

  5. 大学四年的生活规划——做一个清醒的奋斗者

    可能很多人都有着同样的疑惑:大学究竟要怎样过才不算虚度呢?这确实是一个值得思考的问题.但是或许没有任何人可以给你一个准确地回答,因为那些只是他们自己的见解与看法,他们不一定适合你,你也不可能完全借鉴. ...

  6. 2021-09-29破解小米“铁蛋”,只需9999元,你也可以做一个四足机器人!

    https://www.eet-china.com/news/202109291008.html 2021-09-29破解小米"铁蛋",只需9999元,你也可以做一个四足机器人! ...

  7. 十四、pygame做一个成语填空游戏

    最近看到很多人玩成语填字游戏,那么先用pygame来做一个吧,花了大半天终于完成了,附下效果图. 主要两个py文件 封装的一些操作类idiom_lib.py # -*- coding=utf-8 -* ...

  8. 大学四年生活总结_【备考进阶】一分钟对你大学四年生活做一个总结

    关注内蒙农信社公众号:内蒙古农信招聘资讯(nmnxsks) 内蒙古农信招聘资讯.备考福利一手掌握 2021农信社备考交流群 853288119 备考交流QQ群 853288119 问题: 请用一分钟对 ...

  9. 绿色节能,怎么用ESP32 + HaaS Python怎么做一个起夜小灯?接上个“智慧路灯”案例中的留下的地下室人体感应亮灭灯

    自上个案例 "用ESP32 + HaaS Python做一个 智慧路灯 系统,稍加改造也能用在地下室哦"发布以来,数度冲上CSDN 领域热度排行榜 与 全站热度排行榜,也有朋友与我 ...

最新文章

  1. KD树和LSH局部敏感哈希
  2. java on RHEL5
  3. 使用 diskpart 实现无损数据回收空间再分区
  4. 数据增强之图像旋转及坐标对应(附代码)
  5. Android Service(7)--完结篇
  6. Express — 使用步骤
  7. 演示IPFS的一个完整的流程以及针对部分概念的详解
  8. Flutter快速上车之Widget
  9. JavaScript 面向对象编程(二) —— 构造函数 / 原型 / 继承 / ES5 新增方法
  10. ByteBufferMessageSet分析
  11. 程序代码移植和烧录需要注意什么_网站定制化开发需要注意什么?
  12. 经常有人问我:我想招个会写文案的,可是好文案真的很难招,自己写吧,又不会……
  13. JAVA面向对象——继承
  14. 十种程序语言帮你读懂大数据的“秘密”,Julia位列其中!(转)
  15. 通达信手机版分时图指标大全_通达信精选指标——挣开眼就买卖版指标详解
  16. 3dmax2018卸载/安装失败/如何彻底卸载清除干净3dmax2018注册表和文件的方法
  17. 编程语言排行榜 - 2020年度最热门编程语言盘点!
  18. 将已购买的知乎Live课堂图片下载并导出的教程
  19. 推荐,Java Emoji Converter(Emoji表情转换工具)
  20. 从头搭建rpc框架_#LearnByDIY-如何从头开始创建JavaScript单元测试框架

热门文章

  1. 锐捷某系统前台任意文件写入漏洞分析
  2. Android中GridView(网络视图)使用
  3. 京东商城店铺排名优化搜索规则及优化方向浅析
  4. 网络搜不到别的计算机名,改了wifi名字后电脑搜不到网络怎么办?
  5. samsung.android.sdk,Android应用无法在Samsung Galaxy Apps上提交(如何包含Samsung SDK?)
  6. 解决W10: Warning: Changing a readonly file
  7. linux端口 fcs校验,linux – 如何接收错误的以太网帧并禁用CRC / FCS计算?
  8. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑
  9. 架构的交付到底应该交付什么?
  10. 性能评估:性能测试与容量评估