如何检查框架是否存在 - 如果存在 - 将其销毁?

时间:2013-01-29 19:08:53

标签: python tkinter

我试图从在线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()

1 个答案:

答案 0 :(得分:0)

mframe仅在函数内定义。它会在每次传递函数后自动销毁。要验证这一点,您可以添加:“global mframe”,使其成为一个全局变量,直到下一次调用该函数为止。

有更好的解决方案,例如将变量存储在类中,如另一个答案所示。

更新标签上下文怎么样?您也可以尝试仅使用一个多行标签。