所以我在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 :(得分: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)
要:
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()
答案 1 :(得分:0)
几种可能性。
首先,insert
将 将新文本插入现有文本中。因此,您必须使用delete
删除您不再需要的部分。
我认为另一个更简单的解决方案是不使用Text
小部件,而是使用Label
,它允许您设置和替换它显示的text
一次全部。您无法手动编辑Label小部件中的文本,但我认为状态栏不是您想要的。