一个无所谓-熟悉一下python
朋友用python写了一个小软件,刚好没有怎么认真用python编过程序,于是就改进一下
主要练习了一些知识:
1.python Tkinter 页面布局,这次软件用了用了grid
2.Event 事件绑定
3. 字符串的处理。
4.tkFileDialog 的使用
5.一点点面向对象的编程。
6.python编码的结构以及练习Code好习惯
后期改进:
1. 加滚动条
2. 加算法变换文件
3. 可以修改保存路径
4.强化错误处理
5.添加函数,根据类型,用office直接双击打开转换成功的文件。
遇到的坑:
鼠标事件绑定出错:
当用bind方法,绑定事件时,必须分行来写,如下为正确的写法,否则如果用一行来写,鼠标绑定事件会有type 的错误
self.Text_in=Text(master,width=40,height=25,yscrollcommand=self.Text_in_sv.set,xscrollcommand=self.Text_in_sh.set, wrap='none')self.Text_in.insert(END,'请双击选择文件,可多选!!')self.Text_in.grid(row=2,column=0)
错误的写法,这样会到时Event绑定不成功:
self.Text_in=Text(master,width=40,height=25,yscrollcommand=self.Text_in_sv.set,xscrollcommand=self.Text_in_sh.set, wrap='none').grid(row=2,column=0)
字符串转换要点
弹出字符串最后一个字符优雅的写法 files[:-1]
粗糙的代码:
for name in filenames:
if name == filenames[-1]:
self.Text_in.insert(END,name)
break
self.Text_in.insert(END,name+'\n')
为了最后一行不加'\n',只能用这种方法,有没有优雅的写法

#-*- coding:utf-8 -*-
# __author__ = 'Big Cow'
from Tkinter import *
import tablib
import Tkinter
import tkFileDialog
class MainFrame(Tkinter.Frame):
def __init__(self,master):
Tkinter.Frame.__init__(self,master)
Label_top=Label(master,text='转换小软件')
Label_top.grid(row=0,columnspan=3)
Label_L=Label(master,text="转换输入:")
Label_L.grid(row=1,column=0)
Label_M=Label(master,text="========")
Label_M.grid(row=1,column=1)
Label_R=Label(master,text="转换输出")
Label_R.grid(row=1,column=2)
self.Text_in_sv = Tkinter.Scrollbar(self, orient=Tkinter.VERTICAL) #文本框-竖向滚动条
self.Text_in_sh = Tkinter.Scrollbar(self, orient=Tkinter.HORIZONTAL) #文本框-横向滚动条
self.Text_in=Text(master,width=40,height=25,yscrollcommand=self.Text_in_sv.set,xscrollcommand=self.Text_in_sh.set, wrap='none')
self.Text_in.insert(END,'请双击选择文件,可多选!!')
self.Text_in.grid(row=2,column=0)
Button_trans=Button(master,text='---》xls',width=6,command=self.txt2xls)
Button_trans.grid(row=2,column=1)
self.Text_out = Text(master,width=40,height=25,wrap='none')
self.Text_out.grid(row=2,column=2,padx=15)
Label_bottom =Label(master,text='Power by Cow')
Label_bottom.grid(row=3,columnspan=3,sticky='es')
self.Text_in.bind('<Double-Button-1>',self.OperateFiles)
# define options for opening or saving a file
self.file_opt = options = {}
options['defaultextension'] = '.txt'
options['filetypes'] = [('all files', '.*'), ('text files', '.txt')]
options['initialdir'] = 'C:\\'
options['initialfile'] = 'cow.txt'
options['parent'] = master
options['title'] = 'Pls chouse a file'
options['multiple'] = 1
#save path
self.dir_opt = options = {}
options['initialdir'] = 'C:\\'
options['mustexist'] = False
options['parent'] = master
options['title'] = 'This is a title'
def OperateFiles(self,event=None):
filenames = tkFileDialog.askopenfilename(**self.file_opt)
if filenames:
self.Text_in.delete(0.0, Tkinter.END)
for name in filenames:
if name == filenames[-1]:
self.Text_in.insert(END,name)
break
self.Text_in.insert(END,name+'\n')
def OpenXls(self):
pass
def txt2xls(self):
files = self.Text_in.get(1.0, END)
if files:
for text in files[:-1].split('\n'):
print text
try:
headers = ('servername','location' ,'name','upstream')
data = []
data = tablib.Dataset(*data, headers=headers)
linuxlines=open(text,"rb")
for line in linuxlines.readlines():
col=line.split('|')
if len(col)!=4:
continue
for server in col[3].split(";"):
data.append([col[0],col[1],col[2],server])
open(text+".xls","wb").write(data.xls)
linuxlines.close()
self.Text_out.insert(END,text+'.xls\n')
except:
print "Error"
else:
print "请输入正确的文件!!"
def main():
root = Tkinter.Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
root.title('Txt2Xls')
root.geometry('620x360')
main_frame = MainFrame(root)
main_frame.mainloop()
if __name__ == "__main__":
main()
pass

浙公网安备 33010602011771号