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

双Python文件使用Tkinter时出现'module 'B' has no attribute 'view_note'错误的技术问询

解决Python循环导入+Tkinter模块属性不存在的问题

你在开发Tkinter程序时,用A.py和B.py两个文件配合,运行B.py却碰到了'module 'B' has no attribute 'view_note''的错误,咱们来一步步拆解问题,再给出修复方案。

问题根源分析

1. 循环导入导致模块加载异常

你的代码里A导入了B,B又导入了A,这是典型的循环导入问题。当Python加载B.py时,它会去导入A.py,而A.py又要导入B.py——这时候B模块还没完成全部初始化,导致后续调用B的内容时出现属性找不到的情况。

2. 属性访问路径错误

view_note是obj_2类的实例属性,它属于obj_2的某个具体对象,而不是B模块本身。你直接用b.view_note去访问,相当于找B模块的全局属性,自然会提示不存在。

修复方案

我们需要打破循环导入,同时修正属性的访问方式,让代码逻辑更清晰:

修改后的A.py

# 文件 >> A.py
class obj_1:
    def __init__(self):
        print('obj_1 >> __init__')
    
    def obj_1_func_1(self, target_obj):
        print('obj_1 >> obj_1_func_1')
        # 通过传入的obj_2实例访问view_note属性
        target_obj.view_note.set("Information Updating...")

修改后的B.py

# 文件 >> B.py
from tkinter import *
import tkinter as tk
# 直接导入A中的obj_1类,避免模块级别的循环导入
from A import obj_1

class obj_2:
    def __init__(self):
        print('obj_2 >> __init__')
        self.view_note = StringVar()
        # 将root设为obj_2的实例属性,避免全局变量问题
        self.root = Tk()
        self.root.title("TK TEST")
        self.root.geometry("150x100+10+8")
        
        n1 = tk.Label(self.root, textvariable=self.view_note, fg='black')
        n1.pack()
        
        self.obj_2_func_2()
    
    def display(self):
        self.view_note.set("Information Updating...")
    
    def obj_2_func_2(self):
        print('obj_2 >> obj_2_func_2')
        # 创建obj_1的实例,调用方法时传入当前obj_2的实例
        obj1_instance = obj_1()
        obj1_instance.obj_1_func_1(self)

if __name__ == '__main__':
    application = obj_2()
    application.root.mainloop()

关键修改点说明

  • 打破循环导入:B.py直接从A导入obj_1类,A.py不再导入B模块,而是通过方法参数接收obj_2的实例,彻底解决循环依赖问题。
  • 修正属性访问:obj_1_func_1通过传入的target_obj参数(也就是obj_2的实例)来访问view_note,这才是实例属性的正确访问方式。
  • 规范全局变量:把root从全局变量改成obj_2的实例属性,让代码的封装性更好,避免全局变量带来的潜在问题。

现在运行B.py,就能正常弹出窗口,标签会显示"Information Updating...",控制台也会打印对应的方法调用日志啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:47:32