2017-09-07 2 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行目に値を挿入しようとしている理由は、私はわからないので、1本のライン上のすべてのデータを示しただし あなたは変更する必要がありますテキストボックス。あなたが文脈やより良い例を提供できるなら、私はより良い答えを提供することができます。

しかし、実際には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を設定して交換することを可能にする、Textウィジェットを使用するが、代わりにLabelを使用していないされています。ラベルウィジェットのテキストを手動で編集することはできませんが、とにかく必要なものではないステータスバーを想定しています。

関連する問題