Tkinter实践

python_logo
Tkinter模块是Python的标准Tk GUI工具包的接口,可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里,是一款简单易用的跨平台python库。

环境说明

  • 电脑系统:windows10 64bit
  • python版本: 3.5.2 64bit
  • IDE: PyCharm Community Edition 2016.2.2

功能实现

  • 单词自考自查工具
  • 读取xlsx格式的词典,可进行中译英,英译中的顺序或随机自查,对结果可保存为txt格式的文本
  • 自动记录中->英错误次数,以日志形式保存
  • 具体见程序的版本信息部分

依赖库

  • tkinter
  • os
  • xlrd
  • xlwt
  • xlutils
  • random
  • pyinstaller

源码

完整python源码

可执行文件(.exe)

windows下可执行文件

部分细节说明

自定义窗体返回按钮功能

root=Tk()
root.geometry("800x500")
root.protocol("WM_DELETE_WINDOW", callback)

callback函数功能可自定义,调用root的destroy方法可关闭窗体。

使光标默认聚焦在某一控件

# create Entry module
e = StringVar()
entry = Entry(root, validate='key', textvariable=e, width=20,font=("宋体", 18, "bold"))
entry.pack()
entry.bind('<Return>', rtnkey)
entry.focus_force()

很多控件都有focus_force方法,该方法即会将光标默认设在对应控件上。

使滚动条自动滚动到最底部

# create text module
textPad=Text(root,undo=True)
textPad.pack(expand=YES,fill=BOTH)

#create scroll bar
scroll=Scrollbar(textPad)
textPad.config(yscrollcommand=scroll.set)
scroll.config(command=textPad.yview)
scroll.config(cursor='hand2')
scroll.pack(side=RIGHT,fill=Y)

textPad.insert(CURRENT,'\n')
textPad.see(END)

关键在最后两行,text组件的插入使用insert方法,示例中在当前位置CURRENT插入了一个换行符,see方法(参数为END)可使text组件处在可见内容的最尾部,即可使滚动条默认处在最底部。
如果滚动条没有处在最底部就调用text组件的insert方法,会在界面显示可见的最后一行插入,而不是text组件整体的CURRENT位置插入。

xls/xlsx文件的读/写/改写

# read a xls/xlsx file
import xlrd
file = 'C:/Users/chenxy/Desktop/tkinter_dict/test_data.xlsx'
raw_data = xlrd.open_workbook(file)
table = raw_data.sheets()[0]
col0 = table.col_values(0)
row0 = table.row_values(0)

xlrd的文件读取,对于xls,xlsx都没问题。

#write a new xls file 
import xlwt
file = xlwt.Workbook()
table = file.add_sheet('sheet1', cell_overwrite_ok=True)
table.write(0, 0, '[0,0]')
for i in range(0, 10):
    table.write(0 , i, '[0,'+str(i)+']')
file.save('C:/Users/chenxy/Desktop/tkinter_dict/new_data.xls')

cell_overwrite_ok=True可以使文件在保存之前重写,
xlwt只能生成xls文件;生成xlsx文件也不会报错,但无法打开,显示已损坏。可能跟python版本有关,换成低版本也许能表现正常。

#rewrite a xls file existed
import xlutils
file = 'C:/Users/chenxy/Desktop/tkinter_dict/test_data.xlsx'
raw_data = xlrd.open_workbook(file)
file_copy = xlutils.copy.copy(raw_data)
table = file_copy.get_sheet(0)
for i in range(0, 10):
    table.write(0 , i, '[0,'+str(i)+']')
file_copy.save('C:/Users/chenxy/Desktop/tkinter_dict/test_data.xlsx')

使用xlutils的copy方法,之后的部分按照xlrd的相似方式写即可。
注:xlutils是基于xlrd和xlwt的。

python代码打包成exe文件

python有很多用于打包的模块,但对于python3.5,目前能正常使用的貌似只有pyinstaller(并且对于32位,64位都支持)。在cmd中,进入到python文件所在目录,然后执行如下代码:

pyinstaller -F -w 文件名.py

-F 表示生成单个可执行文件,即将所有依赖文件都集中到一个exe文件中
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那要把这个选项删除

------ 本文结束 ------