You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:07:14