Python FTP登录客户端开发报错:'str'对象无'get'属性求助
解决FTP客户端的AttributeError问题
首先,咱们直接揪出报错的根源:你在FTPSUBMIT方法里写了self.ftpentry = self.ftpentry.get()——这行代码把原本是Entry控件对象的self.ftpentry直接覆盖成了它的文本内容(字符串类型)。等后续再尝试调用get()方法时,自然就会报错,因为字符串根本没有get()属性。
除此之外,你的tk_method类还有几个Tkinter使用上的小问题,比如创建多个Tk实例、事件循环处理不当,这些也会影响功能正常运行。下面是完整的修正方案:
第一步:修正自定义tk_method类
from tkinter import * class tk_method(Tk): def __init__(self): super().__init__() # 用super()更简洁地调用父类构造方法 self.ftp_address = None # 专门用来存储用户输入的FTP地址 def FTPSUBMIT(self): # 不要覆盖Entry控件,用单独的属性存输入值 self.ftp_address = self.ftpentry.get() self.destroy() # 输入完成后关闭窗口 def GETFTP(self): self.title('GETFTP') # 先确保窗口显示(之前的wm_withdraw会隐藏窗口,用户看不到输入框) self.deiconify() # 创建输入框和按钮,绑定到当前实例(self) self.ftpentry = Entry(self) self.submit = Button(self, text='Submit', command=self.FTPSUBMIT) self.ftpentry.pack(padx=10, pady=10) self.submit.pack(pady=5) # 等待窗口关闭后再继续执行后续代码 self.wait_window() return self.ftp_address # 返回用户输入的FTP地址 if __name__ == '__main__': app = tk_method() ftp_addr = app.GETFTP() print(f"输入的FTP地址:{ftp_addr}")
第二步:修正主模块代码
from ftplib import FTP import os from TKPractice import tk_method def main(): P = tk_method() print('Welcome to the FTP Directory Transfer Tool.') print('You can use this program to move Directories from one platform to another') ftp_address = Connect(P) # 这里可以继续写后续的FTP连接逻辑,比如: # if ftp_address: # ftp = FTP(ftp_address) # # ... 登录、传输操作 def Connect(P): # 调用GETFTP获取用户输入的FTP地址 pingstatus = P.GETFTP() return pingstatus if __name__ == '__main__': main()
关键修改点说明
- 避免覆盖控件对象:用
self.ftp_address存储输入的文本,保留self.ftpentry作为Entry控件的引用,防止后续操作出错。 - 单一Tk实例:
tk_method已经继承了Tk,所以直接用self操作窗口,不要额外创建新的Tk实例,避免Tkinter的多窗口冲突。 - 等待用户输入完成:用
wait_window()让程序暂停,直到用户点击提交关闭窗口,确保主模块能拿到用户输入的内容。 - 明确返回值:
GETFTP方法返回用户输入的FTP地址,让主模块可以直接使用这个值进行后续操作。
内容的提问来源于stack exchange,提问作者RickwhoPrograms
相关产品推荐
相关产品推荐

