你好,我正在计时器。这是我的代码:
from tkinter import*
import time
Screen=Tk()
Screen.resizable(0,0)
myText=Label(Screen,text="Welcome To X Timer!",font=(None,50),bg="green")
myText.pack()
aText=Label(Screen,text="0:0",font=(None,30))
aText.pack()
def start_timer():
x=1
while(True):
time.sleep(1)
x=x+1
itemconfigure(aText,text=x)
strBTN=Button(Screen,text="Start",bg="purple",font=
("Helvetica",45),command=start_timer)
strBTN.pack()
Screen.mainloop()
但是在第14行说:错误:未定义itemconfigure。请帮忙!
答案 0 :(得分:2)
目前尚不清楚您要执行的操作,但是您的class tee():
def __init__(self, filepath):
self.old_stdout = sys.stdout
self.old_stderr = sys.stderr
self.name = filepath
sys.stdout = self
sys.stderr = self
def write(self, text):
self.old_stdout.write(text)
with open(self.name, 'a', encoding="utf-8") as f:
f.write(text)
def flush(self):
pass
def __del__(self):
sys.stdout = self.old_stdout
sys.stdout = self.old_stderr
函数是一个无限繁忙的循环,它将挂起您的GUI,所以我认为这不是 !也许您打算打start_timer
?
Tk.after
我要弯腰说,您希望def start_timer(x=0):
x+=1
Screen.after(1000, lambda x=x: start_timer(x))
# 1000 is the time (in milliseconds) before the callback should be invoked again
# lambda x=x... is the callback itself. It binds start_timer's x to the scope of
# the lambda, then calls start_timer with that x.
itemconfigure(aText,text=x)
更改标签上的文字?您应该改用:
itemconfigure(aText, text=x)
答案 1 :(得分:0)
要更改标签的文本,必须使用标签的方法config()
。因此,执行itemconfigure(aText,text=x)
而不是aText.config(text=x)
。我认为itemconfigure()
函数不存在。
还有其他问题。例如,如果您定义一个具有无限循环的函数作为按钮回调,则该按钮将始终保持按下状态(按钮保持按下状态,直到回调完成)。因此,我建议您在回调的末尾使用Screen的方法after()
,并使其执行相同的功能。
after()
在输入毫秒数后执行一个功能,因此Screen.after(1000, function)
将在一秒钟内暂停执行并执行该功能。
您也可以使用s
变量存储秒。当s
等于60时,它将重置为0,并且分钟数(m
会增加1。
这里有代码:
from tkinter import*
Screen=Tk()
Screen.resizable(0,0)
myText=Label(Screen,text="Welcome To X Timer!",font=(None,50),bg="green")
myText.pack()
aText=Label(Screen,text="0:0",font=(None,30))
aText.pack()
def start_timer():
global s, m, aText, Screen
aText.config(text = str(m) + ":" + str(s))
s += 1
if s == 60:
s = 0
m += 1
Screen.after(1000,start_timer)
s = 0
m = 0
strBTN=Button(Screen,text="Start",bg="purple",font=("Helvetica",45),command=start_timer)
strBTN.pack()
Screen.mainloop()
这应该可以工作(在我的计算机上它可以正常工作)。如果您听不懂,就问一下。