我是Python类的新手,并尝试通过Tkinter编写科学代码的接口。但我无法从类或函数中调用函数(在另一个类中并打开另一个框架)。我一直在搜索超过2天,但找不到我的案例的答案。如果你解释像解释一个孩子我会很高兴,因为我不太了解技术细节。
我的代码结构如下:
class first_class(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
....
def WhateverFunction():
"do sth"
class second_class(tk.Tk):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
.....
**I want to use "WhateverFunction" here**
.....
所以基本上,我无法从另一个类访问该函数。
我在网上找到的搜索方式,如Python using methods from other classes方法。 Bu这并没有解决我的问题。这可能是因为我正在使用不同的Tkinter帧。我现在不...谢谢,欢呼!
答案 0 :(得分:1)
在您的代码中,您将函数WhateverFunction
定义为__init__
中的本地函数。因此,无法从代码的其他部分看到它,也无法调用它。
相反,您可以将您的功能实现为一种方法。它看起来像这样:
class first_class(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
....
def WhateverFunction(self):
"do sth"
现在可以在任何地方调用该函数作为first_class
的实例的方法:
first_class_instance = first_class()
first_class_instance.WhateverFunction()
答案 1 :(得分:0)
我在这里问了完全相同的问题,但没有回应。基本上,你做不到。 WhateverFunction
仅存在于__init__
范围内,second_class
本身可以仅 来自__init__
。这是通过您链接到的“使用来自其他类的方法”问题中描述的方法完成的,但是由于您可能只从{{1获得输出而无法执行您想要执行的操作因此,您无法访问该函数中定义的任何函数。
要解决此问题,为什么不全局定义WhateverFunction
然后像往常一样调用它,或者在__init__
函数之外但仍在first_class
内声明它?
答案 2 :(得分:-1)
只需创建该类的实例,如果second_class实例应由第一个实例组成,则调用该方法。
def second_class(tk.Tk):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
first_object = first_class().WhateverFunction()
现在更好的方法是从第一个继承second_class
,并且调用方法考虑两个类具有相同的父,只要继承是有意义的。
def second_class(first_class):
def __init__(self, parent, controller):
super(second_class, self).__init__(parent, controller)
self.WhateverFunction()
注意: - 请尝试遵循Python的某些约定,例如使用camel case命名类,使用snake case命名方法/函数。