无法将函数调用到其他类

时间:2017-06-02 11:20:00

标签: python class tkinter self

我是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帧。我现在不...谢谢,欢呼!

3 个答案:

答案 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命名方法/函数。