Python 2.7 Tkinter и ftplib - PullRequest
       21

Python 2.7 Tkinter и ftplib

1 голос
/ 01 января 2012

У меня быстрый вопрос, и он может показаться глупым.Но ради любви ко мне я не могу найти решение онлайн или самостоятельно!Я пытаюсь сделать FTP-клиент, использующий python для себя, и я пытаюсь заставить список в Tkinter отображать все имена файлов на FTP-сервере.Но я не могу получить текст для отображения!Вот код, который у меня есть ниже:

# Import the FTP object from ftplib
from ftplib import FTP
from Tkinter import *

app = Tk()
app.title("FTP")
app.geometry("300x500")

def handleDownload(block):
    file.write(block)
    print ".",

def login():
    ftp.login(username.get(),password.get())

    # This is where I am held up I tried ftp.retrlines('LIST') but it would
    # not be inserted into to the list box instead it inserted "Tranfer Complete" at the    end!
    # Any suggetion?
    h = ?
    stuff = Listbox(app)
    stuff.insert(END, h)
    stuff.pack()

    filename = "Steam Engine Poster.pdf"

    Label(app, text ='Opening local file ' + filename).pack()
    file = open(filename, 'wb')

    Label(app, text = "Downloading Steam Engine Poster.pdf").pack()

    ftp.retrbinary('RETR ' + filename, handleDownload)

    Label(app, text = "Closing FTP connection!").pack()

    ftp.close()



ftp = FTP('sciphigames.com')
Label(app, text = "Login").pack()

username = StringVar(None)
username = Entry(app, text = "Username: ")
username.pack()

password = StringVar(None)
password = Entry(app, text = "Password: ")
password.pack()

button = Button(app, text = "Login!", command = login)
button.pack()

app.mainloop()

1 Ответ

2 голосов
/ 01 января 2012

Вы получаете «Transfer Complete», потому что retrlines возвращает код ответа, а не список . Если вы проверите документацию, то увидите, что помимо команды есть второй аргумент, обратный вызов, который будет вызываться для каждой возвращаемой строки. По умолчанию он просто печатает строку на стандартный вывод.

lines = []
def append_line(line):
    lines.append(line)
ftp.retrlines('LIST', append_line)
...