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

Tkinter跨文件调用其他类Frame组件解决framey未定义报错问题

错误原因

framey是Frameyellow类的实例属性,仅属于你在main.py中实例化得到的myframe对象,funbut.py的全局作用域中没有定义该变量,直接调用必然会报未定义错误。

修改方案

我们通过给回调函数传参的方式注入目标frame,不引入额外全局变量,耦合度更低,符合多文件拆分解耦的目标:

  • 修改funbut.py:改造函数,接收目标frame作为入参
from tkinter import *

def but_fun1(target_frame):
    label1 = Label(target_frame,text="LabelText")
    label1.place(x=10,y=10)
  • 修改main.py:按钮触发回调时用lambda把已实例化的framey属性传入函数
from tkinter import *
from fyellow import *
import funbut

root = Tk()
root.geometry("500x500")

myframe = Frameyellow(root)

# 用lambda包装回调,传递frame参数
but1 = Button(root, text="Text",command=lambda: funbut.but_fun1(myframe.framey))
but1.pack()

root.mainloop()
  • fyellow.py无需修改,保持原有逻辑即可。

修改后运行即可正常点击按钮在黄色frame中添加Label。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:06:07