2016-06-29 5 views
0

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, .....) 
+1

変数をグローバルにしてみましたか? –

+0

あなたのインデントのためにこれについて確かではない、 'text'はオブジェクト属性(' self.text')かクラス属性ですか? – cdarke

答えて

0

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

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

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

ありがとうございました。しかし、あなたの例と私の質問はちょっと違うようです。 GUIクラス(wx.Frame)の変数をクラス外から変更したいとします。 –

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)は、物事をまとめるための整然とした方法です。あなたがこのパラダイムの後であなたのアプリケーションをモデル化したくない場合でも、それから懸念の分離についての理由を学ぶことができます。

関連する問題