Python 2.7 Tkinter 和 ftplib
我有个简单的问题,可能听起来有点傻。不过我真的找不到网上的解决方案,也想不出自己该怎么做!我正在用Python制作一个FTP客户端,想在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
你看到“传输完成”是因为 retrlines
返回的是响应代码,而不是 文件列表。如果你查看文档,会发现除了命令之外,还有一个第二个参数,也就是回调函数,它会对每一行返回的内容进行处理。默认情况下,这个回调函数只是把每一行打印到标准输出。
lines = []
def append_line(line):
lines.append(line)
ftp.retrlines('LIST', append_line)