2017-09-07 64 views
-1

所以我在Tkinter上做了一个状态栏,我想在那里显示一些值。有时候这个值会改变,所以我需要状态栏改变。当我运行我的程序时,该值显示得很好,但是当我更改该值并插入它时,旧值将保留,并且新值将打印在旧的值旁边。如何清除Tkinter上的文本窗口小部件的文本?

我的问题是我该如何删除第一个,然后添加另一个?

from tkinter import * 
class lol: 

    def __init__(self, window): 
     frame = Frame(window) 
     frame.grid() 

     self.statusbarTotal = Text(window, width= 8, height= 1, bd=1, relief= SUNKEN) 
     self.statusbarTotal.grid(row=13, column=0, sticky=W) 

     self.presetButton1 = Button(window, text=" 10 ", command=self.preset10) 
     self.presetButton1.grid(row=2, column=0) 

     self.presetButton2 = Button(window, text=" 30 ", command=self.preset30) 
     self.presetButton2.grid(row=2, column=1) 


    def preset10(self): 
      global waitingTime 
      waitingTime = 600 
      self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
      print(waitingTime) 

    def preset30(self): 
      global waitingTime 
      waitingTime = 1800 
      self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
      print(waitingTime) 

tk = Tk() 
b = lol(tk) 
tk.mainloop() 
+0

您是否尝试过使用记录的'delete'方法? –

回答

0

除了你的缩进问题。 您需要更改:

def preset10(self): 
    global waitingTime 
    waitingTime = 600 
    self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
    print(waitingTime) 

def preset30(self): 
    global waitingTime 
    waitingTime = 1800 
    self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
    print(waitingTime) 

要:

def preset10(self): 
    global waitingTime 
    waitingTime = 600 
    self.statusbarTotal.delete(1.0, END) 
    self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
    print(waitingTime) 

def preset30(self): 
    global waitingTime 
    waitingTime = 1800 
    self.statusbarTotal.delete(1.0, END) 
    self.statusbarTotal.insert(13.0, int(waitingTime/60)) 
    print(waitingTime) 

但是你的程序将显示所有在同一行,所以我不知道为什么你尝试在的13号线插入值的数据文本框。如果你能提供上下文或更好的例子,我可以提供更好的答案。

然而,你应该真的摆脱你所有的变量global因为这被认为是不好的编程使用。

相反,您的代码应该使用类属性。这样的事情:

from tkinter import * 


class lol: 

    def __init__(self, window): 
     frame = Frame(window) 
     frame.grid() 
     # uss self. to make a variable name a class attribute 
     self.waitingTime = 0 

     self.statusbarTotal = Text(window, width= 8, height= 1, bd=1, relief= SUNKEN) 
     self.statusbarTotal.grid(row=13, column=0, sticky=W) 

     self.presetButton1 = Button(window, text=" 10 ", command=self.preset10) 
     self.presetButton1.grid(row=2, column=0) 

     self.presetButton2 = Button(window, text=" 30 ", command=self.preset30) 
     self.presetButton2.grid(row=2, column=1) 


    def preset10(self): 
     self.waitingTime = 600 
     self.statusbarTotal.delete(1.0, END) 
     self.statusbarTotal.insert(13.0, int(self.waitingTime/60)) 
     print(self.waitingTime) 

    def preset30(self): 
     self.waitingTime = 1800 
     self.statusbarTotal.delete(1.0, END) 
     self.statusbarTotal.insert(13.0, int(self.waitingTime/60)) 
     print(self.waitingTime) 

tk = Tk() 
b = lol(tk) 
tk.mainloop() 
+0

这只是我做的那个软件的一部分,这就是为什么我在第13行插入数值的原因。但是非常感谢,你真的帮助我! –

+0

@AntonLambrecht如果我的答案适合您,请选中我答案旁边的复选框,表示您已得到答案。 –

0

几种可能性。

首先是insert会,好了,插入新文本插入到现有的文本。因此,您必须使用delete删除不再需要的部分。

我认为更简单的另一种解决方案是不使用Text小部件,而是使用Label,它允许您设置和替换它一次显示的所有text。你不能手动编辑标签小部件中的文本,但我想对于一个不是你想要的状态栏。

相关问题