1

オンラインのtxtファイルから数行のテキストを取得して、ウィンドウに表示しようとしています。ここまでは順調ですね。

そのウィンドウを「x」秒ごとに再読み込み/更新して、そのウィンドウ内のラベルが再描画されるようにしたい (その txt ファイルのテキスト行を追加、削除、または変更した場合) が、これまでのところ実行できませんでした。 .

フレームをルートに追加し、ラベルをフレームに動的に追加しました。「x」秒ごとに、そのフレームが存在するかどうかを確認し、存在する場合は破棄し、txt ファイルの内容を再度プルしてフレームとラベルを再作成し、ラベルが最新になるようにします。

そのために、関数の先頭に「Try/Except」を追加して、フレームが存在するかどうかを確認して破棄しようとしましたが、機能させることができませんでした。

非常に経験の浅い python 愛好家に役立つアイデアはありますか?

#coding:utf-8

from Tkinter import *
import urllib
import time

mroot = Tk()

def mactions():
    mconteudo = urllib.urlopen('http://www.xyz.com.br/recados.txt')
    mtexto = mconteudo.read().split('***')

    #this is where I think I'm doing something wrong - I always get a NameError.
    try:
        mframe.destroy()
    except NameError:
        print '- NameError -'
    except UnboundLocalError:
        print '- UnboundLocalError -'

    mframe = Frame(mroot)
    for i in mtexto:
        w = Label(mframe, text=i)
        w.pack()
        wseparador = Label(mframe, text='________')
        wseparador.pack()
        mframe.pack()

    mroot.after(2000, mactions)

mactions()
mroot.mainloop()
4

1 に答える 1

0

mframeは関数内でのみ定義されます。関数をパスするたびに自動的に破棄されます。これを確認するには、「global mframe」を追加して、関数の次の呼び出しまで存続するグローバル変数にします。

他の回答で提案されているように、変数をクラスに格納するなどのより良い解決策があります。

ラベルコンテキストの更新はどうですか?また、単一の複数行ラベルのみを使用しようとする場合もあります。

于 2013-01-30T14:18:39.397 に答える