如何访问其他类中的变量

时间:2016-06-29 06:44:43

标签: python wxpython

在Functions类中,我想访问Frame类的变量。

请告诉我是否有办法。

class Functions():

    def changeText():
        ...
        ...
        I want to change the 'text' in the Frame class 
        ex )Frame.text.SetFont('change text') 

GUI元素

class Frame(wx.Frame):    

    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, ....)
    ....
    ....
    self.text = wx.StaticText(panel, .....)

2 个答案:

答案 0 :(得分:0)

您可以通过将类的实例发送到函数来执行此操作:

class myClass(object):
    def __init__(self, text):
        self.text = text

def changeText(input):
    input.text = "world"

example = myClass("hello")
changeText(example)

答案 1 :(得分:0)

您必须告诉您的对象要处理什么。凭空而来Functions实例将不知道(应该怎么做?)Frame应该是什么。你可以使Frame成为全局的,但我认为这不是一个好主意(如果你想使用多个框架实例,它会破裂)。所以你会写:

class Functors:
    ...
    def set_text(txt_frame, the_text):
        """txt_frame has to be a :class:`my_txt_frm` instance with ``self.text`` being a ``StaticText`` instance."""
        txt_frame.text.SetLabel(the_text)

class my_txt_frm(wx.Frame): # do not name the derived class Frame to make more clear it is derived!
    def __init__(# ...
        ...
        self.text = wx.StaticText(#...

现在有趣的是:如何将各个部分组合在一起?你必须在你的代码中的某个地方有这样的东西:

funct = Functors() # the class which know how to do things on our GUI elements
frm = my_txt_frm(#...

以后有些行...

funct.set_text(frm, 'thenewtext')

因此,对于具有更大图片的应用程序,有必要保留对构建块的引用,以便以后将它们绑定在一起。

将事物联系在一起的有序方式称为MVC(see a great example in the wxPython wiki)。即使你不想在这个范例之后对你的应用进行建模,你也可以从中学习如何推理关注点的分离。