用Python寫的基於Tkinter 的FTP客戶端
阿新 • • 發佈:2019-01-09
# -*- coding: utf-8 -*-
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()