2017-06-21 12 views
-1

関数からクラスに情報を渡す必要があります。クラスはGUI情報をtkinterに保持し、関数はGUIのためにいくつかの作業と出力データを保持します。どのようにクラスに関数の出力を与えることができますか?関数からクラスへのデータの移動

例:

class Page1(Page): 
    def __init__(self, *args, **kwargs): 
     Page.__init__(self, *args, **kwargs) 
     #setting up a label to change based off output: 
     self.testing_label = tk.Label(self, text='OUTPUT OF WORKER WILL GO HERE', width=20) 
     self.testing_label.pack(side="top") 

#function that does work: 
def worker(x): 
    work = x + 5 
    return(work) 

は、どのように私はクラスに返さworkがラベルに表示されるようになるだろうか?

+1

は、クラスのオブジェクトを作成し、コンストラクタ(__init__)にデータを渡します –

+0

'worker'は一度だけ(' Page1'をインスタンス化する前に)一度だけ実行されるか、何度も実行され、毎回ラベルを変更しますか? –

+0

これは複数回実行され、ラベルは毎回変更する必要があります。良い質問 – GreenSaber

答えて

1

任意のクラスのインスタンス内の変数の値を設定するには、そのクラスへの参照のみが必要です。それをworkerに渡すか、workerにそのページへの参照があるかどうかを確認してください。

あなたのコードをもっと見ることなく、具体的な例を挙げることはできません。呼び出し側が内部のウィジェットの名前を知っている必要はありませんように

def worker(x): 
    work = x + 5 
    return(work) 
... 
page = Page() 
... 
result = worker(42) 
page.testing_label.configure(text=str(result)) 

さらに良いインターフェースを提供するために、ページのために次のようになります。単にあなたの質問にあるものに基づいて、あなたはこのような何かがそれを行うだろう。たとえば:

class Page1(Page): 
    ... 
    def set_result(self, string): 
     self.testing_label.configure(text=string) 
... 
page = Page1() 
... 
result = worker(42) 
page.set_result(result) 

workerが実際にPage1の内部方法であれば、あなたはそれがこのように動作させることができることを注意:

class Page1(Page): 
    ... 
    def worker(self, x): 
     work = x + 5 
     self.testing_label.configure(text=str(work)) 
+0

これは正しいトラックになりましたが、ラベル自体は変更されていません。もっと具体的な別の質問を私は書いた。ありがとうございました。 https://stackoverflow.com/questions/44683486/moving-data-from-function-to-a-class – GreenSaber

関連する問題