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

Tkinter规避循环导入时遇AttributeError:LoginInfo类无self属性

问题分析

错误AttributeError: type object 'LoginInfo' has no attribute 'self'是因为你错误地尝试从模块login_page中访问self——self是类实例的专属属性,不是模块或类本身的属性。同时你的代码存在循环导入问题(login_page导入page_one,page_one又导入login_page),这也是需要解决的隐患。

修复方案

1. 移除循环导入并正确传递实例引用

PageOne不需要导入login_page模块,因为创建PageOne时已经传入了LoginInfo的实例(作为parent参数),直接通过这个实例就能访问username_entry的值。

修改后的代码

page_one.py

import tkinter as tk

class PageOne(tk.Frame):
   def __init__(self, parent, *args, **kwargs):
       tk.Frame.__init__(self, parent, *args, **kwargs)                                                              
       self.info()

   def info(self):
       # 通过parent访问LoginInfo实例的username_entry
       print(self.parent.username_entry.get())

login_page.py

为了彻底解决循环导入,把page_one的导入移到login函数内部(模块级导入会触发循环加载,函数内导入只有在调用时才执行):

import tkinter as tk

class LoginInfo(tk.Frame):
  def __init__(self, parent, *args, **kwargs):
      tk.Frame.__init__(self, parent, *args, **kwargs)

      self.login_frame = tk.Frame(self)
      self.login_frame.pack()

      self.username_label = tk.Label(self.login_frame, text='Username:')
      self.username_label.grid(row=0, column=0, padx=(10,0), pady=(10,0))

      self.username_entry = tk.Entry(self.login_frame)
      self.username_entry.grid(row=0, column=1, padx=(10,0), pady=(10,0))

      self.login_button = tk.Button(self.login_frame, text='Login', command=self.login)
      self.login_button.grid(row=2, column=0, columnspan=2, pady=20)

  def login(self):
     # 移到函数内导入,避免循环导入
     import page_one
     self.page_one = page_one.PageOne(self)
     self.page_one.pack(fill="both", expand='True')

     self.login_frame.destroy()

main.py

无需修改,保持原样即可。

关键说明
  • self.parent:在PageOne中,parent就是创建它时传入的LoginInfo实例(self),因此可以通过self.parent直接访问该实例的属性和方法。
  • 函数内导入:将import page_one放在login方法内部,避免模块初始化阶段的循环导入问题,因为只有当用户点击登录按钮时才会执行这个导入。

内容的提问来源于stack exchange,提问作者Kome Gognome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:01:11