代码返回错误?(Python)是否未配置itemconfigure?

时间:2018-11-11 16:50:55

标签: python python-3.x

你好,我正在计时器。这是我的代码:

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。请帮忙!

2 个答案:

答案 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 函数是一个无限繁忙的循环,它将挂起您的GU​​I,所以我认为这不是 !也许您打算打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()

这应该可以工作(在我的计算机上它可以正常工作)。如果您听不懂,就问一下。