簡體   English   中英

如何清除Tkinter上“文本”小部件中的文本?

[英]how can I clear text from a Text widget on 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()

除了縮進問題。 您需要更改:

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()

幾種可能性。

第一個是insert會很好地新文本插入到現有文本中。 因此,您必須使用delete刪除不再需要的部分。

我認為更簡單的另一種解決方案是不使用Text小部件,而使用Label ,它允許您設置和替換一次顯示的所有text 您不能在Label小部件中手動編輯文本,但是我想使用的狀態欄不是您想要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM