Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从其他类访问类对象_Python_Tkinter - Fatal编程技术网

Python 从其他类访问类对象

Python 从其他类访问类对象,python,tkinter,Python,Tkinter,我正在尝试编写一些函数,这些函数可以引用tkinter对象,这些对象来自它所编写的类之外的类。我的类库代码来自Youtube上“Sentdex”的tkinter教程,下面的页面是他的技术的简单迭代 在点击另一页上的按钮后,我希望能够将PageOne上的ButtonOne从DISABLED重新配置为NORMAL,但无法在线找到任何工作方法 将tkinter作为tk导入 从tkinter进口* 类基(tk.tk): 定义初始化(self,*args,**kwargs): tk.tk.\uuuuu初

我正在尝试编写一些函数,这些函数可以引用tkinter对象,这些对象来自它所编写的类之外的类。我的
类库
代码来自Youtube上“Sentdex”的tkinter教程,下面的页面是他的技术的简单迭代

在点击另一页上的按钮后,我希望能够将
PageOne
上的
ButtonOne
DISABLED
重新配置为
NORMAL
,但无法在线找到任何工作方法

将tkinter作为tk导入
从tkinter进口*
类基(tk.tk):
定义初始化(self,*args,**kwargs):
tk.tk.\uuuuu初始化(self,*args,**kwargs)
容器=tk.框架(自身)
container.pack(side=“top”,fill=“both”,expand=True)
container.grid_rowconfigure(0,权重=1)
container.grid\u column配置(0,权重=1)
self.frames={}
对于F英寸(第一页、第二页、第三页):
框架=F(容器,自身)
self.frames[F]=帧
frame.grid(行=0,列=0,sticky=“nsew”)
自我展示框架(第一页)
def显示画面(自身,续):
帧=自身帧[续]
frame.tkraise()
类别第一页(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
self.config(高度=500,宽度=1500,bg=“红色”)
self.Button1=tk.Button(self,text=“Button 1”,状态=禁用)
self.Button1.pack()
第二类(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
self.config(高度=500,宽度=1500,bg=“蓝色”)
self.Button2=tk.Button(self,text=“Button 2”,状态=正常)
self.Button2.pack()
第三类(传统框架):
定义初始化(自、父、控制器):
tk.Frame.\uuuu init\uuuuu(自,父)
菜单=传统菜单(自身)
controller.config(menu=menu)
self.config(高度=500,宽度=1500,bg=“绿色”)
菜单=传统菜单(自身)
controller.config(menu=menu)
子菜单=传统菜单(自身)
菜单.添加级联(标签=“页面”,菜单=子菜单)
子菜单.add_命令(label=“Page One”,command=lambda:controller.show_frame(PageOne))
子菜单.add_命令(label=“Page Two”,command=lambda:controller.show_frame(Page Two))
子菜单.add_命令(label=“第三页”,command=lambda:controller.show_帧(第三页))
self.Button3=tk.Button(self,text=“Button 3”,状态=正常)
self.Button3.pack()
程序=基()

program.mainloop()
PageOne实例不是由基类知道的,而是由基类实例(在框架列表中)知道的

而不是:

def enableOne(self):
    Base.PageOne.Button1.config(state=NORMAL)
我会尝试:

def enableOne(self):
    self.controller.frames[PageOne].Button1.config(state=NORMAL)

假设您在Page3

init中添加self.controller=controller,则PageOne实例不为基类所知,但为基类所知(在框架列表中)

而不是:

def enableOne(self):
    Base.PageOne.Button1.config(state=NORMAL)
我会尝试:

def enableOne(self):
    self.controller.frames[PageOne].Button1.config(state=NORMAL)

如果您在第3页的init中添加self.controller=controller,解释器会说
parent
没有定义,就好像它是一个变量名一样。在避免此错误之前,我是否遗漏了一行代码?self.parent(前提是在第3页的
\uuuu init\uuuuuu
中添加
self.parent=parent
)以及代码之外的
self.parent
行,我现在得到错误:
AttributeError:“Frame”对象没有属性“frames”
我认为我不应该在不运行它的情况下调试代码,对不起。最后一次尝试控制器?哈哈!成功了!谢谢你的帮助;我希望它能在我项目的其余部分起作用。解释器说,
parent
没有定义,好像它是一个变量名。在避免此错误之前,我是否遗漏了一行代码?self.parent(前提是在第3页的
\uuuu init\uuuuuu
中添加
self.parent=parent
)以及代码之外的
self.parent
行,我现在得到错误:
AttributeError:“Frame”对象没有属性“frames”
我认为我不应该在不运行它的情况下调试代码,对不起。最后一次尝试控制器?哈哈!成功了!谢谢你的帮助;我希望它能在我项目的其余部分起作用。我相信我缺少的是“controller”或“parent”或lambda命令的使用,但我找不到任何文档来告诉我如何做到这一点。我相信我缺少的是“controller”或“parent”或lambda命令的使用,但是我找不到任何文档来告诉我怎么做。