『壹』 Python 中用 Tkinter GUI编程
可以使用sqlite,下面是使用方法。
导入PythonSQLITE数据库模块
Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~
importsqlite3
2.创建/打开数据库
在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。
cx=sqlite3.connect("E:/test.db")
也可以创建数据库在内存中。
con=sqlite3.connect(":memory:")
3.数据库连接对象
打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:
commit()--事务提交
rollback()--事务回滚
close()--关闭一个数据库连接
cursor()--创建一个游标
关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。
4.使用游标查询数据库
我们需要使用游标对象SQL语句查询数据库,获得查询对象。通过以下方法来定义一个游标。
cu=cx.cursor()
游标对象有以下的操作:
execute()--执行sql语句
executemany--执行多条sql语句
close()--关闭游标
fetchone()--从结果中取一条记录,并将游标指向下一条记录
fetchmany()--从结果中取多条记录
fetchall()--从结果中取出所有记录
scroll()--游标滚动
1.建表
cu.execute("createtablecatalog(idintegerprimarykey,pidinteger,namevarchar(10)UNIQUE,nicknametextNULL)")
上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。
2.插入数据
请注意避免以下写法:
#Neverdothis--insecure会导致注入攻击
pid=200
c.execute("...wherepid='%s'"%pid)
正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。
fortin[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
cx.execute("insertintocatalogvalues(?,?,?,?)",t)
简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.
cx.commit()
3.查询
cu.execute("select*fromcatalog")
要提取查询到的数据,使用游标的fetch函数,如:
In[10]:cu.fetchall()
Out[10]:[(0,10,u'abc',u'Yu'),(1,20,u'cba',u'Xu')]
如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.
4.修改
In[12]:cu.execute("updatecatalogsetname='Boy'whereid=0")
In[13]:cx.commit()
注意,修改数据以后提交
5.删除
cu.execute("deletefromcatalogwhereid=1")
cx.commit()
6.使用中文
请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u
x=u'鱼'
cu.execute("updatecatalogsetname=?whereid=0",x)
cu.execute("select*fromcatalog")
cu.fetchall()
[(0,10,u'u9c7c',u'Yu'),(1,20,u'cba',u'Xu')]
如果要显示出中文字体,那需要依次打印出每个字符串
In[26]:foritemincu.fetchall():
....:forelementinitem:
....:printelement,
....:
010鱼Yu
120cbaXu
7.Row类型
Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。原文如下:
sqlite3.Rowprovidesbothindex-basedandcase-insensitivename-.-basedapproachorevenadb_rowbasedsolution.
Row对象的详细介绍
classsqlite3.Row
_factoryforConnectionobjects..
,iteration,representation,equalitytestingandlen().
,theycompareequal.
Changedinversion2.6:Addediterationandequality(hashability).
keys()
.Immediatelyafteraquery,.description.
Newinversion2.6.
下面举例说明
In[30]:cx.row_factory=sqlite3.Row
In[31]:c=cx.cursor()
In[32]:c.execute('select*fromcatalog')
Out[32]:<sqlite3.Cursorobjectat0x05666680>
In[33]:r=c.fetchone()
In[34]:type(r)
Out[34]:<type'sqlite3.Row'>
In[35]:r
Out[35]:<sqlite3.Rowobjectat0x05348980>
In[36]:printr
(0,10,u'u9c7c',u'Yu')
In[37]:len(r)
Out[37]:4
In[39]:r[2]#使用索引查询
Out[39]:u'u9c7c'
In[41]:r.keys()
Out[41]:['id','pid','name','nickname']
In[42]:foreinr:
....:printe,
....:
010鱼Yu
使用列的关键词查询
In[43]:r['id']
Out[43]:0
In[44]:r['name']
Out[44]:u'u9c7c'
『贰』 14. python GUI编程之Tkinter详细讲解一
GUI编程概述
1.1 GUI含义及Tkinter介绍
1.2 常见的GUI库
1.3 tkinter GUI开发核心步骤
Thinker整体描述
2.1 类继承关系图
2.2 相关类的简单解释
2.3 标准的GUI程序类的写法模板
主窗口和布局管理器
3.1 主窗口大小位置方法
3.2 布局管理器
3.2.1 pack()
3.2.1 grid()
3.2.1 place()
感谢阅读,更多干货知识搜索:嵌入式软件开发园!!!
『叁』 Python GUI编程利器:Tkinker中的消息对话框(13)
学习Tkinter中的消息对话框的使用,实现文本、警告、错误、疑问、是否、是否取消、确定取消、重试取消消息对话框的效果。
文本消息对话框通过showinfo()创建,语法为:showinfo(title,message),title为标题,message为内容。
提示警告消息对话框使用showwarning(title,message),点击确定返回ok。
提示错误消息对话框使用showerror(title,message),点击确定返回ok。
疑问消息对话框分为askquestion()和askyesno()函数,askquestion()返回yes或no,askyesno()返回True或False,语法为:askquestion(title,message)和askyesno(title,message)。
疑问消息对话框包含是否、是否取消、确定取消、重试取消功能,使用askyesnocancel(title,message)和askokcancel(title,message)及askretrycancel(title,message)函数,返回值分别为True、False或None。
参考代码提供实践指导。
学习完成,欢迎提问交流。