카운트 다운 타이머에서 카운트 다운을 표시하려면 어떻게합니까

새시

저는 Python을 처음 사용하고 일반적으로 프로그래밍합니다. 데킬라 타이머 인 타이머에 카운트 다운 디스플레이를 만드는 데 도움이 필요합니다. 내 친구들은 테킬라를 많이 마시고 컴퓨터에 대해 전혀 몰라 타이머를 만들어달라고 부탁했습니다.

어쨌든, 저는 레이아웃을 제가 할 수있는 최선의 방법으로 만들었고 다음과 같이 보입니다 : https://i.stack.imgur.com/bvt57.png

도움이 필요한 것은 1 분 버튼을 클릭하면 1 분에서 0으로 카운트 다운된다는 것입니다. 다른 버튼도 마찬가지입니다. 중지 작업에 대한 도움이 필요하므로 언제든지 중지 버튼을 눌러 타이머를 중지 할 수 있습니다. 정말 큰 도움이 될 것입니다 !!

내 코드는 다음과 같습니다.

import tkinter as tk

#GUI
root = tk.Tk()
root.title("Tequila timer")

#Load of background with the tequila bottle
canvas = tk.Canvas(root, width=423, height=700)
canvas.pack()
Load = tk.PhotoImage(file="tequila.png")
canvas.create_image(211, 350, image=Load)

#buttons
btn_1min = tk.Button(root, text="1 min", width=10, height=5, command=root.quit)
btn_1min_v = canvas.create_window(140, 350, window=btn_1min)

btn_10min = tk.Button(root, text="10 min", width=10, height=5, command=root.quit)
bt1_10min_v = canvas.create_window(283, 350, window=btn_10min)

btn_1hour = tk.Button(root, text="1 hour", width=10, height=5, command=root.quit)
bt1_1hour_v = canvas.create_window(140, 475, window=btn_1hour)

btn_2hours = tk.Button(root, text="2 hours", width=10, height=5, command=root.quit)
bt1_2hours_v = canvas.create_window(283, 475, window=btn_2hours)

btn_stop = tk.Button(root, text="Stop", width=10, height=5, command=root.quit)
bt1_stop_v = canvas.create_window(211, 600, window=btn_stop)

#Display
label = tk.Label(root, text="00:00:00", width=9, font=("calibri", 40, "bold"))
label.pack()
label_v = canvas.create_window(211, 200, window=label)

root.mainloop()
Ax319

문제는 버튼이 아무것도 매핑되지 않는다는 것입니다. 글쎄, root.quit당신의 창문을 닫는 것 외에는 .

첫 번째 문제부터 시작하겠습니다. 에서 텍스트를 업데이트해야합니다 Label. 이를 수행하는 좋은 방법은 tkinters StringVar클래스입니다. 를 업데이트 StringVar하면 텍스트도 업데이트 Label되므로 먼저 수행해 보겠습니다.

countdown = tk.StringVar()
countdown.set("00:00:00")

그런 다음 Label.

label = tk.Label(root, textvariable=countdown, width=9, font=("calibri", 40, "bold"))

이제 처리되었습니다. 두 번째 문제로 넘어가겠습니다. 콜백 기능이 부족합니다. 먼저 카운트 다운 할 가변 시간 (초)을받는 함수를 호출하도록 설정하겠습니다.

root.mainloop()호출 된 후에 무언가를 표시하려면 after()메서드를 사용할 수 있습니다 . 나중에 업데이트를 취소하는 데 사용할 수있는 식별자를 반환합니다. 그러나 나중에 다른 함수에서 사용하여 취소하려면 키워드를 사용하여 전역 변수로 만들어야합니다 global.

root.after그 (밀리 초)이 경과 한 후에 호출에 밀리 세컨드의 인수 및 기능을합니다. 이 함수를 호출 할 때보 다 1 밀리 초 더 적게이 함수를 다시 호출 해 보겠습니다. 또한 초가 0 미만으로 떨어지면 콜백을 취소해야합니다.

이전에 검색 root.after_cancelafter식별자를 사용 하여이를 수행 할 수 있습니다 root.after.

주목해야 할 또 다른 점은 root.after함수 인수가 함수 객체를 기대한다는 것입니다. 인수가있는 함수를 전달하려면 람다로 래핑 할 수 있습니다.

def update(seconds):
    global after
    if seconds >= 0:
        countdown.set(seconds_to_time(seconds))
        after = root.after(1000, lambda: update(seconds - 1))
    else:
        root.after_cancel(after)

하지만이 seconds_to_time기능은 무엇 으로 설정 StringVar되어 있습니까? 글쎄, 우리의 초를 적절한 hh:mm:ss형식으로 표시하는 것은 약간의 도우미 입니다.

def seconds_to_time(seconds):
    hours = seconds // 3600
    seconds -= hours * 3600
    minutes = seconds // 60
    seconds -= minutes * 60
    return f'{hours:02d}:{minutes:02d}:{seconds:02d}'

마지막 요청은 카운트 다운을 중지하는 것입니다. 글로벌 이후 식별자를 취소하면됩니다. NameError아직 설정되지 않은 경우 오류를 방지하여 먼저 애프터를 설정했는지 확인하는 것이 좋습니다 .

def stop():
    try:
        root.after_cancel(after)
    except NameError:
        pass

아래 전체 코드 : 버튼의 콜백 함수가 람다로 래핑되어 콜백에 인수를 전달할 수 있습니다.

import tkinter as tk

def update(seconds):
    global after
    if seconds >= 0:
        countdown.set(seconds_to_time(seconds))
        after = root.after(1000, lambda: update(seconds - 1))
    else:
        root.after_cancel(after)

def seconds_to_time(seconds):
    hours = seconds // 3600
    seconds -= hours * 3600
    minutes = seconds // 60
    seconds -= minutes * 60
    return f'{hours:02d}:{minutes:02d}:{seconds:02d}'

def stop():
    try:
        root.after_cancel(after)
    except NameError:
        pass


#GUI
root = tk.Tk()
root.title("Tequila timer")

#Load of background with the tequila bottle
canvas = tk.Canvas(root, width=423, height=700)
canvas.pack()
Load = tk.PhotoImage(file="tequila.png")
canvas.create_image(211, 350, image=Load)

countdown = tk.StringVar()
countdown.set("00:00:00")

#buttons
btn_1min = tk.Button(root, text="1 min", width=10, height=5, command=lambda: update(60))
btn_1min_v = canvas.create_window(140, 350, window=btn_1min)

btn_10min = tk.Button(root, text="10 min", width=10, height=5, command=lambda: update(600))
bt1_10min_v = canvas.create_window(283, 350, window=btn_10min)

btn_1hour = tk.Button(root, text="1 hour", width=10, height=5, command=lambda: update(3600))
bt1_1hour_v = canvas.create_window(140, 475, window=btn_1hour)

btn_2hours = tk.Button(root, text="2 hours", width=10, height=5, command=lambda: update(7200))
bt1_2hours_v = canvas.create_window(283, 475, window=btn_2hours)

btn_stop = tk.Button(root, text="Stop", width=10, height=5, command=stop)
bt1_stop_v = canvas.create_window(211, 600, window=btn_stop)

#Display
label = tk.Label(root, textvariable=countdown, width=9, font=("calibri", 40, "bold"))
label.pack()
label_v = canvas.create_window(211, 200, window=label)

root.mainloop()

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

TextView에서 카운트 다운 타이머를 어떻게 표시합니까?

분류에서Dev

실행중인 카운트 다운 타이머에서 시간을 빼려면 어떻게합니까?

분류에서Dev

Rainmeter에서이 카운트 다운을 다시 시작하려면 어떻게해야합니까?

분류에서Dev

카운트 다운 시간 (H : i : s)을 사용하여 jquery 또는 js에 대한 메이커 카운트 다운 타이머는 어떻게됩니까?

분류에서Dev

카운트 다운 타이머에서 남은 시간을 어떻게 얻을 수 있습니까?

분류에서Dev

오류 : 자바 스크립트 카운트 다운 타이머가 카운트 다운하지 않습니다.

분류에서Dev

이 타이머를 제대로 카운트 다운하려면 어떻게해야합니까?

분류에서Dev

주어진 값에서 시작하지 않는 카운트 다운 타이머

분류에서Dev

버튼으로 카운트 다운 타이머를 활성화하려면 어떻게해야합니까?

분류에서Dev

jQuery 카운트 다운 타이머-먼저 시작하여 매월 끝까지 카운트 다운?

분류에서Dev

버튼을 누른 후 ModalView에서 카운트 다운 타이머를 생성하려면 어떻게합니까?

분류에서Dev

어떻게 HH에서 카운트 다운 타이머를 표시하기 : MM : SS (영업 시간 : 분 : 초)

분류에서Dev

카운트 다운 타이머가 모달 창 부트 스트랩을 표시하도록합니다.

분류에서Dev

kivy / python에서 화면을 변경하는 카운트 다운 / 타이머

분류에서Dev

각 foreach에 카운트 다운 타이머 표시

분류에서Dev

0에 도달하면 카운트 다운 타이머에 "0"을 추가합니다.

분류에서Dev

루비 변수에서 카운트 다운하기 위해 자바 스크립트 타이머를 어떻게 통합합니까?

분류에서Dev

어레이 카운트 카운트 다운

분류에서Dev

Unity에서 카운트 다운을 사용하여 gnome-session-quit를 어떻게 호출합니까?

분류에서Dev

Unity에서 카운트 다운을 사용하여 gnome-session-quit를 어떻게 호출합니까?

분류에서Dev

SwitchMap을 사용하는 Rxjs 카운트 다운 타이머

분류에서Dev

React에서 카운트 다운 타이머를 표시하는 방법

분류에서Dev

이 jquery 카운트 다운 타이머에 "일"을 추가하는 데 도움이 필요합니다.

분류에서Dev

클릭시 다른 페이지로 리디렉션되는 동시에 카운트 다운을 시작하려면 어떻게해야합니까?

분류에서Dev

매일 특정 시간에 JavaScript 카운트 다운 타이머

분류에서Dev

다중 카운트 다운 타이머

분류에서Dev

1 시간 후에 카운트 다운을 시작하는 자바 스크립트에서 카운트 다운 타이머 만들기

분류에서Dev

카운트 다운 타이머가 작동하지 않습니다.

분류에서Dev

카운트 다운 타이머가 작동하지 않습니다.

Related 관련 기사

  1. 1

    TextView에서 카운트 다운 타이머를 어떻게 표시합니까?

  2. 2

    실행중인 카운트 다운 타이머에서 시간을 빼려면 어떻게합니까?

  3. 3

    Rainmeter에서이 카운트 다운을 다시 시작하려면 어떻게해야합니까?

  4. 4

    카운트 다운 시간 (H : i : s)을 사용하여 jquery 또는 js에 대한 메이커 카운트 다운 타이머는 어떻게됩니까?

  5. 5

    카운트 다운 타이머에서 남은 시간을 어떻게 얻을 수 있습니까?

  6. 6

    오류 : 자바 스크립트 카운트 다운 타이머가 카운트 다운하지 않습니다.

  7. 7

    이 타이머를 제대로 카운트 다운하려면 어떻게해야합니까?

  8. 8

    주어진 값에서 시작하지 않는 카운트 다운 타이머

  9. 9

    버튼으로 카운트 다운 타이머를 활성화하려면 어떻게해야합니까?

  10. 10

    jQuery 카운트 다운 타이머-먼저 시작하여 매월 끝까지 카운트 다운?

  11. 11

    버튼을 누른 후 ModalView에서 카운트 다운 타이머를 생성하려면 어떻게합니까?

  12. 12

    어떻게 HH에서 카운트 다운 타이머를 표시하기 : MM : SS (영업 시간 : 분 : 초)

  13. 13

    카운트 다운 타이머가 모달 창 부트 스트랩을 표시하도록합니다.

  14. 14

    kivy / python에서 화면을 변경하는 카운트 다운 / 타이머

  15. 15

    각 foreach에 카운트 다운 타이머 표시

  16. 16

    0에 도달하면 카운트 다운 타이머에 "0"을 추가합니다.

  17. 17

    루비 변수에서 카운트 다운하기 위해 자바 스크립트 타이머를 어떻게 통합합니까?

  18. 18

    어레이 카운트 카운트 다운

  19. 19

    Unity에서 카운트 다운을 사용하여 gnome-session-quit를 어떻게 호출합니까?

  20. 20

    Unity에서 카운트 다운을 사용하여 gnome-session-quit를 어떻게 호출합니까?

  21. 21

    SwitchMap을 사용하는 Rxjs 카운트 다운 타이머

  22. 22

    React에서 카운트 다운 타이머를 표시하는 방법

  23. 23

    이 jquery 카운트 다운 타이머에 "일"을 추가하는 데 도움이 필요합니다.

  24. 24

    클릭시 다른 페이지로 리디렉션되는 동시에 카운트 다운을 시작하려면 어떻게해야합니까?

  25. 25

    매일 특정 시간에 JavaScript 카운트 다운 타이머

  26. 26

    다중 카운트 다운 타이머

  27. 27

    1 시간 후에 카운트 다운을 시작하는 자바 스크립트에서 카운트 다운 타이머 만들기

  28. 28

    카운트 다운 타이머가 작동하지 않습니다.

  29. 29

    카운트 다운 타이머가 작동하지 않습니다.

뜨겁다태그

보관