亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

時間函數總是給我 0.0 輸出

時間函數總是給我 0.0 輸出

達令說 2023-05-23 15:56:11
我試圖制作一個 CPS 計數器,當我達到 100 次點擊時,它應該打印“測試”并打印達到 100 次點擊所花費的時間。但它總是給出 0.0 作為時間輸出。import tkinterimport timecounter = tkinter.Tk()clicks = 0def addClick():    global clicks    clicks = clicks + 1    lbl.configure(text=clicks)    start = time.time()    if clicks == 100:        print("test")        end = time.time()        print(start - end)lbl = tkinter.Label(counter, text = clicks)lbl.pack()btn = tkinter.Button(counter, text="Click here", command=addClick)btn.pack()counter.mainloop()
查看完整描述

1 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

... 

start = time.time()

if clicks == 100:

    print("test")

    end = time.time()

    print(start - end)

start每次單擊后您都會重新啟動。一種可能的解決方案是僅在第一次單擊后啟動它。這也需要start是一個全局變量。


還要注意你應該做的end - start,不是start - end。


clicks = 0

start = None

...

global clicks

global start

...


if clicks == 1:

    # instantiating 'start' only if it was the first click

    start = time.time()

elif clicks == 100:

    print("test")

    end = time.time()

    print(end - start)

然而,使用全局變量是一種代碼味道和反模式,我們在這么小的程序中已經有 2 個了。


您可以嘗試將它們包裝在數據結構中,例如dict:


import tkinter

import time


counter = tkinter.Tk()


data = {'clicks': 0, 'start': None}


def addClick():

    data['clicks'] += 1

    lbl.configure(text=data['clicks'])


    if data['clicks'] == 1:

        # instantiating 'start' only if it was the first click

        data['start'] = time.time()

    elif data['clicks'] == 100:

        print("test")

        end = time.time()

        print(end - data['start'])


lbl = tkinter.Label(counter, text=data['clicks'])

lbl.pack()


btn = tkinter.Button(counter, text="Click here", command=addClick)

btn.pack()


counter.mainloop()

另一個適合現實世界的解決方案是將整個 tkinter 應用程序包裝在一個類中,該類可以跟蹤其自身狀態。


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號