2

这是一个非常简单的 Python Tk 程序。我似乎无法阻止一个简单的问题,我确信我错过了一些简单的事情。

我做一个标签:

myLabelText = StringVar()
myLabelText.set("Something kinda long")
myLabel = Label(frame, textvariable=myLabelText).pack()

稍后在同一程序中,我想更新该标签以显示“Foo”...

myLabelText.set("Foo")
frame.update_idletasks()

标签现在看起来像“Fooething kinda long” 目标是只有“Foo”并清除标签文本的其余部分。

我试图将标签设置为一长串空格,但由于某种原因,这并没有清除该字段中的文本。这样做的正确方法是什么?


编辑

这是一个演示我的问题的完整示例。

from Tkinter import *
import tkFileDialog, Tkconstants
import time
import urllib2

def main():
    " Controlling function "

    root = Tk()
    app = App(root)
    root.mainloop()

class App:
    " Class for this application "

    def __init__(self, master):

        # Setup the window
        frame = Frame(master, width=400, height=200)
        frame.pack()
        frame.pack_propagate(0)
        self.frame = frame
        self.master = master

        # Start Button
        self.button = Button(frame, text='Start', bg="#339933", height=3, width=10, command=self.start)
        self.button.pack()

        # Label
        self.operation_action_text = StringVar()
        self.operation_action_text.set("Waiting on user to click start...")
        self.operation_action = Label(frame, textvariable=self.operation_action_text)
        self.operation_action.pack()


    def start(self):
        " Change the label "

        # Do something and tell the user
        response = urllib2.urlopen('http://www.kennypyatt.com')
        json_string = response.read()
        self.operation_action_text.set("Something kinda long")
        self.frame.update_idletasks()
        time.sleep(2)

        # Do something else and tell the user
        response = urllib2.urlopen('http://www.kennypyatt.com')
        json_string = response.read()
        self.operation_action_text.set("ABCDEFGHI")
        self.frame.update_idletasks()
        time.sleep(2)

        # Do a third thing and tell the user
        response = urllib2.urlopen('http://www.kennypyatt.com')
        json_string = response.read()
        self.operation_action_text.set("FOO")
        self.frame.update_idletasks()

        return

main()
4

2 回答 2

2
于 2012-08-19T03:53:00.050 回答
0

我知道帖子很旧,但我找到了解决您问题的方法。这是一个解释解决方案的小代码:

global y
y=0
top=TopLevel()

def_newlabel():
  global y,od2,odpuni
  if y > 0:
    od2.destroy()
    odpuni.destroy()
  odpuni = Label(top, text="blablabla",bg="lightskyblue")
  odpuni.grid(row=7, column= 3, sticky="E")
  od2 = Label(top, text="blabla",bg="lightskyblue")
  od2.grid(row=7, column= 4, sticky="W")
  y=y+1

所以基本上,你所要做的就是让计数器失去功能,将其设置为 0,然后当你到达 def_newlabel() 时。它将首先检查您的计数器是否大于 0。如果不是,它将继续程序。如果您已经使用了标签,您的计数器将大于 0 并触发“IF 循环”并删除您的标签文本。我设法让它工作的唯一方法。

问候,卢卡。

于 2017-01-15T05:09:31.947 回答