Python实战——数据库GridView自开发

Python实战——数据库GridView自开发

目标:使用Python自带的tkinter和sqlite3模块,完成一个sqlite数据库记录浏览模块,我命名为Myview。
内容:实用
难度:中等

开发原因有二:
1、简单:很多现成的控件虽然功能强大,但是过于复杂,难以使用。
2、完全控制:我的控件我做主!

先看Myview效果图在这里插入图片描述
左边3个是默认的效果(希望你喜欢),最右边1个是通过参数改变控件颜色的结果。
为了测试这个控件,我建了一个SQLITE数据库test(用SQLITE数据库软件或者Python均可),其中包括两个表(“用户表”和“学生表”)。

使用方法:
1、最简单的情况,只提供数据库:
Myview(窗体, ‘test.db’)
显示的是test.db中的第一个表的全部记录;
2、正常情况,提供数据库和表,显示表的全部记录:
Myview(窗体, ‘test.db’, ‘学生表’)
3、提供数据库和表,以及要显示的字段:
Myview(窗体, ‘test.db’, ‘学生表’, ‘学号’)
4、提供数据库、表、显示的字段和条件:
Myview(窗体, ‘test.db’, ‘学生表’, ‘*’, ‘学号<>""’)
如果意犹未尽,可以设置控件参数,例如颜色和尺寸:
Myview(win, ‘test.db’, ‘学生表’, ‘*’, ‘学号<>""’,
bg1=“blue”, bg2=“yellow”, bg3=“green”, fg1=‘red’,
width=40, height=30)
这就是最右边的效果。

Myview 完整代码如下(包括测验代码):

import tkinter as tk
import sqlite3
class Myview(tk.PanedWindow):
def init(self,master=None,db=’’,tbl=’’,fld=’’,
cond=’’,width=70,height=40,bg1="#a0a0a0",
bg2=“yellow”,bg3=“violet”,fg1=‘black’,
fg2=‘black’,fg3=‘black’,**kw):
super().init(master=master,**kw)
self.scr1 = tk.Scrollbar(self)
self.scr1.pack(side=‘right’,fill=‘y’)
self.scr2 = tk.Scrollbar(self,orient=‘horizontal’)
self.scr2.pack(side=‘bottom’,fill=‘x’)
text = tk.Text(self,width=width-15,height=height-15,
yscrollcommand=self.scr1.set,
xscrollcommand=self.scr2.set,
wrap = ‘none’)
text.pack(expand=‘yes’,fill=‘both’)
self.scr1.config(command=text.yview)
self.scr2.config(command=text.xview)
text.tag_config(“tag_0”,background=bg1,
foreground=fg1)
text.tag_config(“tag_1”,background=bg2,
foreground=fg2)
text.tag_config(“tag_2”,background=bg3,
foreground=fg3)
self.res = mysel(db,tbl,fld,cond)
self.col = len(self.res[0])
self.row = len(self.res1)
text.insert(“end”, “%4s”%"", “tag_0”)
for j in range(self.col):
text.insert(“end”,"%8s"%(self.res[0][j]),
“tag_0”)
text.insert(“end”,"\n")
for i in range(self.row):
text.insert(“end”,"%4s"%(i+1),“tag_0”)
for j in range(self.col):
if i%2==0:
text.insert(“end”,"%8s"%(
self.res[1][i][j]),“tag_1”)
else:
text.insert(“end”,"%8s"%(
self.res[1][i][j]),“tag_2”)
text.insert(“end”,"\n")
def mysel(db,tbl=’’,fld=’
’,cond=’’):
if db==’’:
return ([],[])
conn = sqlite3.connect(db)
cu = conn.cursor()
if tbl==’’:
cu.execute(“select name from sqlite_master where type=‘table’”)
t = cu.fetchall()
t = [line[0] for line in t]
tbl = t[0]
if fld==’’:
cu.execute(‘pragma table_info({})’.format(tbl))
col = cu.fetchall()
col = [x1 for x in col]
else:
col = fld.split(’,’)
sql = ‘SELECT %s FROM %s’%(fld,tbl)
if cond!=’’:
sql += ’ WHERE %s’%cond
cu.execute(sql)
rs = cu.fetchall()
return (col,rs)
if name==‘main’:
win = tk.Tk()
win.title(‘Myview’)
Myview(win,‘test.db’,width=40,height=30
).grid(row=0,column=0)
tk.Label(win,text=‘SELECT * FROM 用户表’
).grid(row=1,column=0,padx=20,pady=20)
Myview(win,‘test.db’,‘学生表’,width=40,height=30
).grid(row=0,column=1)
tk.Label(win,text=‘SELECT * FROM 学生表’
).grid(row=1,column=1,padx=20,pady=20)
Myview(win,‘test.db’,‘学生表’,‘学号’,width=30,height=30
).grid(row=0,column=2)
tk.Label(win,text=‘SELECT 学号 FROM 学生表’
).grid(row=1,column=2,padx=20,pady=20)
Myview(win,‘test.db’,‘学生表’,’
’,‘学号<>""’,
bg1=“blue”,bg2=“yellow”,bg3=“green”,fg1=‘red’,
width=40,height=30).grid(row=0,column=3)
tk.Label(win,text=‘SELECT * FROM 学生表 WHERE 学号<>""’
).grid(row=1,column=3,padx=20,pady=20)
win.mainloop()

最后要说的是,这是我的第一个CSDN博客,对系统的排版不熟悉,如果可以添加文件,我就把测试数据库“test.db”一起加上了。我的感觉,Python是一个快速开发工具,着重完成功能,不在于十全十美。相比C和Java,Python更适合初学,也相对符合国人的习惯。疫情期间宅在家里,开发了不少Python小程序,有RGB调色板、Python菜单生成器、GUI代码自动生成器,等等,不知道大家是不是喜欢?如果大家需要,以后会多发一些文章和代码。

欢迎使用Markdown编辑器

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值