1. 程式人生 > >用Python寫的基於Tkinter 的FTP客戶端

用Python寫的基於Tkinter 的FTP客戶端

# -*- 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()