0

テキストを更新して、tkinter の for ループ内にラベルを表示しようとしています。.after メソッドによると、これは 1 秒後に発生するはずです。

def rightString(self, gro, string):
    for z in string:
        self.message2.configure(text="Good job, %s is a member of %s!" % (z, gro.getName()))

        root.after(1000)
        self.message2.grid()
        print(z, " should be displayed!")

これで十分な情報だと思います。欠けている非常に基本的な何かがあるように感じます。print 関数は IDLE で 'string' の各メンバーを呼び出して表示します。self.message2 が表示されない理由がわかりません。「after」メソッドを含まないスクリプトの他の部分に表示されます。

必要に応じて、コードをさらに投稿します。

ありがとう。

4

2 に答える 2

1

ラベルのテキストを毎秒変更したい場合は、次のように関数を再度スケジュールする必要がありますafter

def rightString(self, gro, string):
    if string:
        z = string[0]
        self.message2.configure(text="Good job, %s is a member of %s!" % (z, gro.getName()))
        root.after(1000, lambda: self.rightString(gro, string[1:])
        print(z, " should be displayed!")

コメントで述べたようにgrid()、テキストを変更するたびに呼び出す必要はありません。


編集:すべての文字列の処理が終了したときに別の関数を実行するには、elseブロックに呼び出しを追加できます。

def rightString(self, gro, string):
    if string:
        # ...
    else:
        doSomethingElse()
于 2013-03-23T20:44:06.110 に答える
0

イベントループがイベント、特に画面上のウィンドウを再描画するイベントを処理できないため、表示されません。after単一の引数だけで呼び出すことを避けるために、コードを再構築する必要があります。

于 2013-03-23T21:56:59.877 に答える