下面是我在每秒經過時讓計數器變數遞增的嘗試。它不像我想象的那樣作業。我認為問題在于試圖將舊時間與新時間進行比較以測量一秒鐘是否過去的 while 回圈。
import time as time
import tkinter as tk
root = tk.Tk()
root.geometry('200x200')
months = {'1': 'Month of Flowers',
'2': 'Month of Moon',
'3': 'Month of Dragon'}
hours = {'1': '1st hour',
'2': '2nd hour',
'3': '3rd hour'}
system_time = tk.Label(root, text=f'{time.time()}')
system_counter = tk.Label(root, text='0')
game_time_month = tk.Label(root, text='Month')
game_time_hour = tk.Label(root, text='Hour')
system_time.pack()
system_counter.pack()
game_time_month.pack()
game_time_hour.pack()
def update_all_time():
system_time['text'] = f'{time.time()}'
game_time_month['text'] = 'Month'
game_time_hour['text'] = 'Hour'
root.update()
system_timer_old = time.time()
counter = 0
while True:
system_timer_new = time.time()
if system_timer_new == system_timer_old 1:
counter = counter 1
system_counter['text'] = 1
update_all_time()
root.mainloop()
uj5u.com熱心網友回復:
經過多少秒的計數器本質上是一個時鐘。不要嘗試實作自己的時鐘;只需使用標準庫中的一個。
計數器的正確值只是自計數開始以來經過的秒數,向下取整為整數。因此,下面的函式回傳計數器應該是什么的當前值;您可以從任何想要獲取計數器值的地方呼叫它。
import time
start_time = time.monotonic()
def get_counter():
current_time = time.monotonic()
return int(current_time - start_time)
uj5u.com熱心網友回復:
僅當 system_timer_new 比舊的 system_timer 正好多 1 時它才會增加。考慮使用視窗還是限制?即,如果您的時間差不是 1,它將永遠不會觸發。考慮使用視窗或限制來觸發計數器的增加。您也可以使用 timedelta 的 datetime 函式。
if system_time_new >= system_time_old:
delta = system_time_new - system_time_old
uj5u.com熱心網友回復:
Tkinter 有一個專門用于調度將來呼叫的函式的方法。如果你想每秒更新一個計數器,它看起來像這樣:
def update_counter():
global counter
counter = 1
system_counter['text'] = counter
system_counter.after(1000, update_counter)
這樣,該函式將更新計數器,用新值更新標簽,然后安排自己在 1 秒(1000 毫秒)內再次運行。你只需要運行一次這個函式,它將繼續每秒執行一次。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/362009.html
