python-Tkinter(1)

最近用python的Tkinter框架写了一个桌面小程序,来实现汉语和蒙语的互译,虽说Tkinter的界面有点丑,肯定不及新兴的pyqt美观,但考虑到以后可能不会过多涉及桌面程序,就讲究用它来写了,毕竟之前有一点点小小的基础。这篇文章中会指出一些实际应用中的例子,如果需要详细了解Tkinter的细节,可以点击我下方推荐的blog进行查看。同时在数据导入过程中涉及到了excel表格,也顺便写下来分享。

操作excel表格

python 作为数据处理的一门优秀语言,在爬虫和数据挖掘领域有着较高的地位,所以不可避免的需要对excel表格进行操作,来存入和读取数据,这其中就要用到xlrd模块(当然还有其他的模块),下面就来介绍它:

首先,xlrd模块需要通过pip install来安装:

1
pip install xlrd

第一步,先导入此模块:

1
import xlrd

第二步,先用xlrd的open__workbook(‘filename’)来打开要读取数据的xlxs文件:

1
f1 = xlrd.open_workbook('filename')

第三步,选择要操作的sheet:

1
booksheet = f1.sheet_by_name('sheetname')

第四步,对行和列的操作:

1
2
3
4
5
6
7
8
9
10
11
12
#对行数进行迭代
for row in range(booksheet.nrows):
p = list()
对列数进行迭代
for col in range(booksheet.ncols):
cel = booksheet.cell(row,col)
val = cel.value
#...对数据进行判断
if xxx:
p.append(val)
#这里已经取出了一行的数值,可以导入数据库
#此处为数据库操作,省略

对excel表格的操作就介绍到这里,如需深入请自行百度


介绍完xlrd,导入了字典数据仅数据库后,我们就需要构建一个gui界面来实现对数据的增删查改了.

GUI功能简介

  • 登录注册
  • 蒙汉互译
  • 后台管理

其实Tkinter的语法很简单,有类似html的一些表单控件,基本理念是先定义一个大窗口,然后将其余的小窗口绑定到这个
大窗口里面,最后再用pack,grid,place三个方法中的一个来进行位置的布局.

先拿主界面来进行举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#主窗口初始化
top=Tk() #主窗口
top.title('蒙汉互译电子词典')#设置左上角标题
#利用canvas画布实现背景图片的加载
canvas = Canvas(top,width = 1200, height = 700, )
canvas.pack(expand = YES, fill = BOTH)
#用ImagetK打开图片,并获取图片的宽高
image = ImageTk.PhotoImage(file = "aa.jpg")
width = image.width()
height = image.height()
#根据图片大小设置主窗体的大小
top.geometry('%dx%d+300+180'%(width,height))
canvas.create_image(0, 0, image = image, anchor = NW)
#内容标题,括号内第一个参数代表这个控件要放在哪个窗体上面,font设置字体
label=Label(canvas,text='蒙汉互译电子词典',font='Helvetica -21 bold') #设置标签字体的初始大小
label.pack(fill=Y,expand=0,pady=60)
#以下皆为按钮设置,text代表按钮内的文字,command后面是按钮按下触发的函数
button_login = Button(canvas,text=u'登录',command=login_register).pack(ipady=5,ipadx=22,pady=10)
button_login = Button(canvas,text=u'蒙汉互译',command=meng_han).pack(ipady=5,ipadx=14,pady=30)
#退出按钮
quit = Button(top,text='退出',command=top.quit,activeforeground='white',
activebackground='red')
quit.pack(fill=X)
#主窗体循环监听
mainloop(
)

稍微解释一下:
一般一个控件定义的第一个参数是要绑定的父元素,其后一般会有如text,command的选项,再后面就是用pack,grid,place来进行布局,可以接受padx,ipadx之类的参数,跟html很类似。

这里涉及到一个问题,就是对一个label或者其他的控件我们可以直接以label1=Label(options=parameters).pack()的形式来定义,但是这样做会导致后面出现一些小问题,假如我们再用label1.config()来对它进行配置,就会出现如 ‘NoneType’ object has no attribute 这样的提示,解释下原因:
pack()函数返回的是空值,所以并不具有config等函数可以调用,我们需要分成两步来写,

1
2
3
label1 = Label()
label1.pack()
label1.config()

这样就不会出现上面的报错了。


我实现的三个功能中用的最多的还是Button,Entry,text三个控件,下面简单介绍下它们:
Entry即输入框,通过它我们可以获得用户输入,进行后续操作

1
2
3
#‘*’代表我们输入的字符用*号替代,跟网页的密码框‘type=password’一个道理
entry = Entry(root,show="*")
entry.pack()

获取输入框的输入数据要调用get方法:

1
content = entry.get()

在输入框中插入字符要用insert方法:

1
entry.insert(0,conent)

button即按钮,通过其中绑定的command函数,我们可以触发相关事件:

1
2
button1 = Button(root,text="确认",command=function_name)
button1.pack()

定义好函数后,点击这个按钮就能够跳转到函数体内执行了。

最后的text为文本框,用户可以输入多行文本,也可以调用insert方法进行插入,可以参考上面的entry。

对Tkinter的简单介绍就到这里了,如需要进行更多的了解,请点击下面的博客链接