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
相关产品推荐
相关产品推荐

