파이썬의 tkinter 라이브러리로 프로그램을 작성해야합니다.tkinter를 사용하여 타이머를 만드는 방법은 무엇입니까?
내 주요 문제는 내가 타이머 또는 hh:mm:ss
같은 시계를 만드는 방법을 모르겠입니다.
스스로 업데이트해야합니다 (어떻게 해야할지 모르겠습니다).
파이썬의 tkinter 라이브러리로 프로그램을 작성해야합니다.tkinter를 사용하여 타이머를 만드는 방법은 무엇입니까?
내 주요 문제는 내가 타이머 또는 hh:mm:ss
같은 시계를 만드는 방법을 모르겠입니다.
스스로 업데이트해야합니다 (어떻게 해야할지 모르겠습니다).
Tkinter 루트 창에는 after
이라는 메서드가 있습니다.이 메서드는 지정된 기간 후에 함수를 호출하도록 예약하는 데 사용할 수 있습니다. 이 함수 자체가 after
이라면 자동으로 반복되는 이벤트를 설정해야합니다. after
시간에 정확하게 실행 기능을 보장하지 않는다는 점을 염두에
# for python 3.x use 'tkinter' rather than 'Tkinter'
import Tkinter as tk
import time
class App():
def __init__(self):
self.root = tk.Tk()
self.label = tk.Label(text="")
self.label.pack()
self.update_clock()
self.root.mainloop()
def update_clock(self):
now = time.strftime("%H:%M:%S")
self.label.configure(text=now)
self.root.after(1000, self.update_clock)
app=App()
곰 : 여기
은 작업 예입니다. 은 일정한 시간이 지나면 실행할 작업을으로 예약합니다. Tkinter가 단일 스레드이므로 응용 프로그램이 사용 중이면 호출되기 전에 지연 될 수 있습니다. 지연은 일반적으로 마이크로 초 단위로 측정됩니다.
이되지 않습니다 재귀 호출 자체에 "파이썬 개체에 도달 한 최대 재귀"오류가 발생합니까? –
@SatwikPasani : 아니, 재귀 호출이 아니기 때문에 아니요. 단지 대기열에 작업을 넣을뿐입니다. –
Python3 시계 예제는 최상위 응용 프로그램이 아닌 frame.after()를 사용합니다. 또한 난 그냥 MVP 패턴을 사용하여 간단한 타이머를 생성
#!/usr/bin/env python3
# Display UTC.
# started with https://docs.python.org/3.4/library/tkinter.html#module-tkinter
import tkinter as tk
import time
def current_iso8601():
"""Get current date and time in ISO8601"""
# https://en.wikipedia.org/wiki/ISO_8601
# https://xkcd.com/1179/
return time.strftime("%Y%m%dT%H%M%SZ", time.gmtime())
class Application(tk.Frame):
def __init__(self, master=None):
tk.Frame.__init__(self, master)
self.pack()
self.createWidgets()
def createWidgets(self):
self.now = tk.StringVar()
self.time = tk.Label(self, font=('Helvetica', 24))
self.time.pack(side="top")
self.time["textvariable"] = self.now
self.QUIT = tk.Button(self, text="QUIT", fg="red",
command=root.destroy)
self.QUIT.pack(side="bottom")
# initial time display
self.onUpdate()
def onUpdate(self):
# update displayed time
self.now.set(current_iso8601())
# schedule timer to call myself after 1 second
self.after(1000, self.onUpdate)
root = tk.Tk()
app = Application(master=root)
root.mainloop()
좋은 대답입니다. 표시된 시간은 실제로 시스템 시간이며 누적 된 오류 시간이 아닙니다 ("약 1000ms"를 60 번 기다리면 60 초가 아닌 "약 1 분"이 걸립니다. 오류는 시간이 지남에 따라 커집니다. 그러나 시계는 몇 초 만에 건너 뛸 수 있습니다. 1 초 미만의 오류가 누적 될 수 있습니다. 앞으로 2 초 건너 뛰십시오. 나는'self.after (1000 - int (1000 * (time.time() - int (time.time()))) 또는 1000, self.onUpdate)'를 제안 할 것이다. 아마도'time.time()'을이 표현식보다 먼저 변수에 저장하는 편이 낫습니다. –
나는 내 의견에 xkcd를 포함시킬 정도로 굉장한 것을 열망한다. – bitsmack
StringVar()와 라벨을 업데이트 보여줍니다 (그러나 그것은 그렇게 간단한 프로젝트에 대한 과잉 될 수있다). 종료, 시작/일시 중지 및 중지 버튼이 있습니다. 시간은 HH : MM : SS 형식으로 표시됩니다. 시간 계산은 초 단위로 여러 번 실행되는 스레드와 타이머가 시작된 시간과 현재 시간의 차이를 사용하여 구현됩니다.
from tkinter import *
import time
tk=Tk()
def clock():
t=time.strftime('%I:%M:%S',time.localtime())
if t!='':
label1.config(text=t,font='times 25')
tk.after(100,clock)
label1=Label(tk,justify='center')
label1.pack()
clock()
tk.mainloop()
설명을 추가 할 수 있다면 도움이 될 것이다. 복사/붙여 넣기 코드는 거의 유용하지 않습니다 ;-) – Carpetsmoker
이 코드는 지역의 정확한 시간을 제공합니다. 또한 타이머 역할을합니다. –
다음 [타이머를 구현하기 위해''root.after()를 사용하는 방법에 대한 코드 예제.]의 (https://gist.github.com/zed/5440b9372a15d86b5c47) – jfs