2012-05-07 6 views
0

私は2つのクラスを持っています.1つはMineFieldと呼ばれ、もうひとつはOptionsと呼ばれ、optionsクラスにはそのクラスの中の関数defからの値を取得するスケールがあります。 MineFieldクラスには3つのパラメータ(w、h、m)があります。私はオプションクラスのスケールからこれらのパラメータに値を割り当てる必要があります。 (私はtkinterを使用します)クラスから変数への値

Class Options: 
    def __init__(self, w, h, m) 
    ... 
    minorinput = Scale.(...) 
    mainloop() 
    ... 
    def assign(): 
    self.width = widthinput.get() 
    self.height = heightinput.get() 
    self.minor = minorinput.get() 

def main(): 
    ins = Options(0,0,0) 
    ins.assign() 
    w = ins.width 
    h = ins.height 
    m = ins.minor 
    game.MineField(w,h,m) 

これらの値をgame.MineFieldにどうやって取得しますか?

+0

minefieldクラスにw、h、mを保存しますか? – Martol1ni

+0

err ...あなたはパラメータとして渡してしまったのですか? –

+0

ゲームの途中で値を変更したい、つまりself.widthが変更されたとき、Minefieldは変更を通知されますか?それはPublish-Subscribeパターンです。 –

答えて

1

コードは非常に珍しいです。本質的に、あなたはあなたがしたいことをすることはできません。少なくとも、あなたがそれをやろうとしている方法ではありません。

mainloopに電話すると、そのステートメントの後のコードの残りの部分は、ウィンドウを破壊するまで実行されません。ウィンドウが破棄されると、存在しないためウィジェットに値を問い合わせることはできません。

+0

あなたは何をお勧めしますか?オプションウィンドウを撤回するとどうなりますか? – tivon

+0

私はウィジェットが(少なくとも私がgame.MineFieldオブジェクトを作成するまで)それらの値を "保持"します。このように「撤退」しますか? – tivon

+0

@tivon:あなたのコードを構造化したやり方では、Optionsクラスが破壊されるまでMineFieldオブジェクトを作成することはできません(そのコンストラクタは 'mainloop'を呼び出して無限ループを開始します。破壊されました)。オプションが破棄されると、値はアクセスできなくなります。ソリューションを再構築する必要があります。 –