from ftplib import
FTP
import os
from
Tkinter import *
from tkFileDialog import *
class FTP_Tkinter():
def login(
self)
:
self.ftp.connect(
self.ipEntry.get())
self.ftp.login(
self.userEntry.get(),
self.passwdEntry.get())
def reflash(
self)
:
filelist=
self.ftp.nlst()
if self.listbox.size()>
0:
self.listbox.delete(
0,
END)
for i
in range(len(filelist))
:
self.listbox.insert(
END, filelist[i].decode(
'gbk').encode(
'utf8'))
def download(
self,event)
:
inputFileName =
self.listbox.get(
self.listbox.curselection())
file_handler = open(
self.path.get() +
'/'+inputFileName,
'wb').write
self.ftp.retrbinary(
'RETR %s'% os.path.basename(inputFileName.encode(
'gbk')),file_handler,
1024)
def selectPath(
self)
:
self.path
_ = askdirectory()
self.path.set(
self.path
_)
def quit(
self)
:
self.root.quit()
def __init_
_(
self)
:
self.ftp =
FTP()
self.inputFileName=
''
self.root =
Tk()
self.root.resizable(
False,
False)
self.ipEntry=
Entry(
self.root)
self.userEntry=
Entry(
self.root)
self.passwdEntry=
Entry(
self.root,show=
'*')
self.listbox=
Listbox(
self.root)
self.path =
StringVar()
self.path
_ =
' '
self.menubar =
Menu(
self.root)
self.fmenu =
Menu(
self.menubar,tearoff=
0)
for each
in [
'打开',
'保存',
'另存为',
'关闭' ]
:
self.fmenu.add_command(label=each.decode(
'gbk'))
self.fmenu.add_separator()
self.fmenu.add_command(label=
'退出'.decode(
'gbk'),command=
self.quit)
self.menubar.add_cascade(label=
'文件'.decode(
'gbk'),menu=
self.fmenu)
self.emenu =
Menu(
self.menubar,tearoff=
0)
for each
in [
'复制',
'剪切',
'粘贴' ]
:
self.emenu.add_command(label=each.decode(
'gbk'))
self.menubar.add_cascade(label=
'编辑'.decode(
'gbk'),menu=
self.emenu)
self.vmenu =
Menu(
self.menubar,tearoff=
0)
self.vmenu.add_command(label=
'状态'.decode(
'gbk'))
self.menubar.add_cascade(label=
'视图'.decode(
'gbk'),menu=
self.vmenu)
self.amenu =
Menu(
self.menubar,tearoff=
0)
self.amenu.add_command(label=
'版本信息'.decode(
'gbk'))
self.menubar.add_cascade(label=
'关于'.decode(
'gbk'),menu=
self.amenu)
self.root.title(
'FTP客户端'.decode(
'gbk'))
self.root.geometry(
'300x400+500+100')
Label(
self.root,text=
'IP:',font=(
'Arial',
15)).grid(row=
0,column=
0,sticky=
E)
self.ipEntry.grid(row=
0,column=
1,sticky=
W)
Label(
self.root,text=
'用户:'.decode(
'gbk'),font=(
'Arial',
15)).grid(row=
1,column=
0,sticky=
W)
self.userEntry.grid(row=
1,column=
1,sticky=
W)
Label(
self.root,text=
'密码:'.decode(
'gbk'),font=(
'Arial',
15)).grid(row=
2,column=
0,sticky=
W)
self.passwdEntry.grid(row=
2,column=
1,sticky=
W)
Button(
self.root,text=
'登陆'.decode(
'gbk'),font=(
'Arial',
15),bg=
'Red',command=
self.login).grid(row=
1,column=
2)
Button(
self.root,text=
'刷新'.decode(
'gbk'),font=(
'Arial',
15),bg=
'Blue',command=
self.reflash).grid(row=
4,column=
2,columnspan=
2,sticky=
W)
Label(
self.root,text=
'文件列表:'.decode(
'gbk').encode(
'utf8'),font=(
'Arial',
15),bg=
'LimeGreen').grid(row=
4,column=
1,sticky=
W)
self.listbox.bind(
'<Double-Button-1>',
self.download)
self.listbox.grid(row=
5,column=
1,sticky=
W)
Label(
self.root,text =
'目标路径:'.decode(
'gbk')).grid(row=
7,column=
0)
Entry(
self.root, textvariable =
self.path).grid(row =
7, column =
1)
Button(
self.root, text =
"路径选择".decode(
'gbk'),command =
self.selectPath).grid(row =
7, column =
2)
Label(
self.root,text=
'双击可下载文件!'.decode(
'gbk'),font=(
'Arial',
15),fg=
"RED").grid(row=
8,column=
1,sticky=
W)
self.root[
'menu'] =
self.menubar
self.root.mainloop()
def main()
:
ftp=
FTP_Tkinter()
if __name_
_==
'__main__':
main()