pythongui界⾯实例-pythonGUI实战项⽬——tkinter库的简单实
⼀、项⽬说明:
本次通过实现⼀个⼩的功能模块对Python GUI进⾏实践学习。项⽬来源于软件制造⼯程的作业。记录在这⾥以复习下思路和总结编码过程。所有的源代码和⽂件放在这⾥:
内置四个⽂件,分别是ora.sql, dataBaseOpr.py, guiPy.py, test.py
⼆、效果预览:
主界⾯
新增界⾯(更新界⾯⼀致)
功能很简单,就是做⼀张表的增删改查,借此简单的熟悉下python,前⼏天才看了看相关的语法。
三、环境说明:
数据库采⽤oracle12c,使⽤命令⾏进⾏操作。Python版本为3.6.2,命令⾏+Pycharm社区版2017.1.4。Python库使⽤了
cx_Oracle: 连接oracle数据库
tkinter: 简单⼊门的GUI库
cx_Oracle库的安装我直接使⽤IDE⾃带的包管理进⾏下载安装的,tkinter是Python3.2以后⾃带的标准库,后⾯会讲。
四、编码过程实现:
1、数据库表实现(ora.sql):
conn username/pass 根据本机的⽤户名和密码修改,后⾯的数据库连接统⼀都⽤我⾃⼰密码,不再赘述。
为了简化Python代码和实践sql能⼒,写了两个简单的存储过程,分别是插⼊和更新,成功创建后只需调⽤存储过程和传递参数列表即可。代码详情在ora.sql中。
代码折叠:
html类型的网页文件
1 conn c##bai/bai123
2 --建表
3 create or replace tablegroupinfo (
4 no varchar(12) not null,
5 name varchar(20),
6 headername varchar(20),
7 tel
varchar(15),8 constraint pk_groupinfo primary key(no));9
10 --创建过程,直接传⼊参数即可插⼊
11 create or replace procedureinsert_groupinfo12 (%type,13 name groupinfo.name%type,14 headername groupinfo.headername%type,15 l%type16 )17 is
18 begin
19 insert into groupinfo values(no,name,headername,tel);20 commit;21 end;22
23 --创建过程,直接传⼊参数即可完成更新,第⼀个字段为原纪录no。必须有。
args是什么的缩写24 create or replace procedureupdate_groupinfo25 (%type,26 %ty
pe,27 name groupinfo.name%type,28 headername groupinfo.headername%type,29 l%type30 )31 is
32 n_%type;33 n_name groupinfo.name%type;34 n_headername groupinfo.headername%type;35 n_l%type;36 grow groupinfo%rowtype;37 ex_oldnoisnull exception;38 begin
数据分析软件排名
39 select * into grow from groupinfo g =oldno;40 if oldno is null is null then
41 raise ex_oldnoisnull;42 end if;43 if no is null then
44 n_no:=oldno;45 else
46 n_no:=no;47 end if;48 if name is null then
49 n_name:=grow.name;50 else
51 n_name:=name;52 end if;53 if headername is null then
54 n_headername:=grow.headername;55 else
56 n_headername:=headername;57 end if;58 if tel is null then
59 n_tel:=l;60 else
61 n_tel:=tel;62 end if;63 --dbms_output.put_line(n_no||n_name||n_headername||n_tel);
64 update groupinfo g = n_no, g.name = n_name, g.headername = n_headername, g.tel = n_tel
=oldno;65 commit;66 exception67 when ex_oldnoisnull then
68 dbms_output.out_line('选择的⾏不存在')69 end;
ora.sql
2、数据库操作类(dataBaseOpr.py):
先贴源码,折叠起来:
1 #!/usr/bin/env python
2 #encoding: utf-8
3 """
4 :author: xiaoxiaobai5
6 :contact: 865816863@qq7
8 :file: dataBaseOpr.py9
10 :time: 2017/10/3 12:0411
12 :@Software: PyCharm Community Edition13
pycharm python安装教程14 :desc: 连接oracle数据库,并封装了增删改查全部操作。15
16 """
17 importcx_Oracle18
19
20 classOracleOpr:21
22 def __init__(self, username='c##bai', passname='bai123', ip='localhost', datebasename='orcl', ipport='1521'):23 """
24 :param username: 连接数据库的⽤户名25 :param passname: 连接数据库的密码26 :param ip: 数据库ip27 :param datebasename:数据库名28 :param ipport: 数据库端⼝29 :desc: 初始化函数⽤于完成数据库连接,可以通过Status判断是否连接成功,成功则参数为0,不成功则返回错误详情30 """
31 try:Status = '未连接' #连接状态
33 self.queryStatus = 0 #查询状态
34 self.updateStatus = 0 #更新状态
35 self.deleteStatus = 0 #删除状态
36 self.insertStatus = 0 #插⼊状态
37 self.__conn = ''
38 self.__conStr = username+'/'+passname+'@'+ip+':'+ipport+'/'+datebasename39 self.__conn =
t(self.__conStr)Status =041 exceptcx_Oracle.Error as e:Status =e43
44 defcloseconnection(self):45 try:46 if self.__conn:47 self.__conn.close()Status = '连接已断开'
49 exceptcx_Oracle.Error as e:Status =e51
52 def query(self, table='groupinfo', queryby=''):53 """
54 :param table: 查询表名55 :param queryby: 查询条件,⽀持完整where, order by, group by 字句56 :return:返回数据集,列名57 """
58 self.queryStatus =059 result = ''
60 cursor = ''
61 title = ''
62 try:63 sql = 'select * from'+table+' '+queryby64 print(sql)65 cursor = self.__conn.cursor()ute(sql)67
result =cursor.fetchall()68 title = [i[0] for i incursor.description]69 cursor.close()70 cursor = ''
71 exceptcx_Oracle.Error as e:72 self.queryStatus =e73 finally:74 ifcursor:75 cursor.close()76 returnresult, title77
78 def insert(self, proc='insert_groupinfo', insertlist=[]):79 """
80 :param proc: 过程名81 :param insertlist: 参数集合,主键不能为空,参数必须与列对应,数量⼀致82 :desc: 此⽅法通过调⽤过程完成插⼊,需要在sql上完成存储过程,可以通过insertstatus的值判断是否成功83 """
84 self.insertStatus =085 cursor = ''
86 try:87 cursor = self.__conn.cursor()88 cursor.callproc(proc, insertlist)89 cursor.close()90 cursor = ''
91 exceptcx_Oracle.Error as e:92 self.insertStatus =e93 finally:94 ifcursor:95 cursor.close()96
97 def update(self, proc='update_groupinfo', updatelist=[]):98 """
99 :param proc: 存储过程名100 :param updatelist: 更新的集合,第⼀个为查询主键,后⾯的参数为对应的列,可以更新主键。101
:desc: 此⽅法通过调⽤存储过程完成更新操作,可以通过updatestatus的值判断是否成功102 """
103 self.updateStatus =0104 cursor = ''
105 try:106 cursor = self.__conn.cursor()107 cursor.callproc(proc, updatelist)108 cursor.close()109 cursor = ''
110 exceptcx_Oracle.Error as e:111 self.updateStatus =e112 finally:113 ifcursor:114 cursor.close()115
116 def delete(self, deleteby: '删除条件,where关键词后⾯的内容,即列名=列值(可多个组合)', table='groupinfo'):117 """
118 :param deleteby: 删除的条件,除where关键字以外的内容119 :param table: 要删除的表名120 :desc:可以通过deletestatus判断是否成功删除121 """
122 self.deleteStatus =0123 cursor = ''
124 try:125 sql = 'delete' + table + 'where' +deleteby126 cursor = self.__conn.cursor()ute(sql)128
cursor.close()129 cursor = ''
130 exceptcx_Oracle.Error as e:131 self.deleteStatus =e132 finally:133 ifcursor:134 cursor.close()
dataBaseOpr.py
源码注释基本很清晰了,对关键点进⾏说明:数据库连接的数据全部⽤默认参数的形式给出了,可根据实际情况进⾏移植。关于调⽤存储过程,只需要使⽤connect(**).cursor.callproc(存储过程名, 参数列表)即可,⽅便⾼效。
3、GUI界⾯搭建(tkinter):
因为界⾯和逻辑我都写在guiPy.py中的,没有使⽤特别的设计模式。所以这⼀部分主要讲tkinter的⽤法,下⼀部分说明具体的实现。
关于安装:Python3.2后⾃带本库,若引⽤没有,很可能是安装的时候没有选。解决⽅案嘛到安装⽂件修改安装
即可,如下图:mysql和pgsql风格对比
下⼀步打上勾即可,完成安装就能引⽤tkinter了。
使⽤教程简单介绍:
我这次⽤的时候就是在⽹上随便搜了⼀下教程,发现内容都很浅显,⽽且不系统,当然我也没法系统的讲清楚,但官⽅⽂档可以啊,提醒⾃⼰,以后⼀定先看官⽅⽂档!myeclipse2017永久激活码
4、逻辑实现(guiPy.py):
先上代码,基本注释都有:
1 #!/usr/bin/env python
2 #encoding: utf-8
3 """
4 :author: xiaoxiaobai5
6 :contact: 865816863@qq7
8 :file: guiPy.py9
10 :time: 2017/10/3 19:4211

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。