欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python+tkinter實現(xiàn)一個簡單的秒鐘

 更新時間:2024年02月21日 11:34:05   作者:微小冷  
這篇文章主要為大家詳細(xì)介紹了Python如何利用tkinter實現(xiàn)一個簡單的秒鐘,文中的示例代碼講解詳細(xì),具有一定的參考價值,感興趣的小伙伴可以自己動手嘗試一下

需求和框架

本文試圖實現(xiàn)一個簡單的秒表,內(nèi)容如下

在這里插入圖片描述

這個軟件非常簡單,其UI元素只有一個文字標(biāo)簽外加三個按鈕,這三個按鈕的功能如下

  • 點擊Start按鈕,開始進(jìn)行計時,同時Start變灰,無法點擊
  • 點擊Stop按鈕,停止計時,同時Stop變灰,無法點擊
  • 點擊Reset按鈕,則計時歸0,若當(dāng)前處于停止?fàn)顟B(tài),則Reset變灰

則整個軟件所需導(dǎo)入的模塊以及整體框架如下

import tkinter as Tkinter
from datetime import datetime


class Clock():
    def __init__(self) -> None:
        root = Tkinter.Tk()
        root.title("Stopwatch")
        root.minsize(width=250, height=70)

        self.counter = 0
        self.running = False
        self.initWidgets(root)
        root.mainloop()

    def initWidgets(self, root): pass
    def count(self): pass
    def Start(self): pass
    def Stop(self): pass
    def Reset(self): pass

其中,counter為計數(shù)值,即點擊Start之后經(jīng)過的秒數(shù);running為當(dāng)前狀態(tài),如果正在計時,則為True,否則為False。

initWidgets是布局函數(shù),Start, Stop, Reset分別是三個按鈕的回調(diào)函數(shù),count則用于計時。

下面的代碼均為Clock中的方法,在使用時注意縮進(jìn)。

布局和主流程

整個程序分為兩個部分,上面的Label是第一部分,下面三個按鈕共同組成第二部分,其布局代碼如下

def initWidgets(self, root):
    self.label = Tkinter.Label(root,
            text='Ready!', font='Verdana 30 bold')
    self.label.pack()

    f = Tkinter.Frame(root)
    self.start = Tkinter.Button(f, text='Start', width=6,
                command=self.Start)
    self.stop = Tkinter.Button(f, text='Stop', width=6,
                state='disabled', command=self.Stop)
    self.reset = Tkinter.Button(f, text='Reset', width=6,
                state='disabled', command=self.Reset)

    f.pack(anchor='center', pady=5)
    self.start.pack(side='left')
    self.stop.pack(side='left')
    self.reset.pack(side='left')

三個按鈕的三個回調(diào)函數(shù)如下,通過state來調(diào)整當(dāng)前按鈕的可用狀態(tài),若為disabled即表示不可用。當(dāng)點擊Start時,會調(diào)用計時函數(shù)count,這個函數(shù)在后面馬上實現(xiàn)。

當(dāng)點擊Reset后,除了需要將label中的值初始化之外,還需要判斷當(dāng)前是否處于計時狀態(tài),如果已經(jīng)停止計時,且已經(jīng)Reset,則Reset按鈕變灰。

    def Start(self):
        self.running = True
        self.count()
        self.start['state'] = 'disabled'
        self.stop['state'] = 'normal'
        self.reset['state'] = 'normal'

    def Stop(self):
        self.start['state'] = 'normal'
        self.stop['state'] = 'disabled'
        self.reset['state'] = 'normal'
        self.running = False

    def Reset(self):
        self.counter = 0
        if not self.running:
            self.reset['state'] = 'disabled'
        self.label['text'] = '00:00:00'

計時函數(shù)

一般來說,計時肯定要用到time.sleep,但在UI中,這種計時容易導(dǎo)致阻塞,進(jìn)而窗口卡死,而要采用多線程,顯然會增加程序的復(fù)雜程度。為此,可動用tkinter組件的after方法,以label.after(a,b)為例,表示經(jīng)過a毫秒后,執(zhí)行b。

下面即為采用after方法的計時函數(shù)。當(dāng)程序不處于計時狀態(tài)時,直接跳出。否則開始計時,當(dāng)計數(shù)值為0時,標(biāo)簽顯示Ready,否則顯示的則是秒數(shù)。這里比較巧妙的方法是,等待1000毫秒,再重新調(diào)用自己,從而實現(xiàn)計時功能。

    def count(self):
        if not self.running:
            return
        if self.counter == 0:
            self.label['text'] = 'Ready!'
        else:
            tt = datetime.utcfromtimestamp(self.counter)
            self.label['text'] = tt.strftime('%H:%M:%S')

        self.label.after(1000, self.count)
        self.counter += 1

以上就是python+tkinter實現(xiàn)一個簡單的秒鐘的詳細(xì)內(nèi)容,更多關(guān)于python tkinter秒鐘的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python中six模塊基礎(chǔ)用法

    Python中six模塊基礎(chǔ)用法

    在本篇文章里小編給大家分享的是關(guān)于Python中six模塊基礎(chǔ)用法以及相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-12-12
  • pygame實現(xiàn)非圖片按鈕效果

    pygame實現(xiàn)非圖片按鈕效果

    這篇文章主要介紹了pygame實現(xiàn)非圖片按鈕效果,不使用圖片制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python Tornado框架輕松寫一個Web應(yīng)用的全過程

    Python Tornado框架輕松寫一個Web應(yīng)用的全過程

    Tornado全稱Tornado Web Server,是一個用Python語言寫成的Web服務(wù)器兼Web應(yīng)用框架,Tornado走的是少而精的方向,注重的是性能優(yōu)越,它最出名的是異步非阻塞的服務(wù)器方式,這篇文章主要給大家介紹了關(guān)于Python Tornado框架輕松寫一個Web應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python包管理工具pip用法詳解

    Python包管理工具pip用法詳解

    本文詳細(xì)講解了Python包管理工具pip的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Python中窗口操作的完整教程

    Python中窗口操作的完整教程

    在使用 Python 進(jìn)行窗口操作時,可以執(zhí)行各種任務(wù),如最大化、最小化、置頂窗口,本文將詳細(xì)介紹這些操作,并提供豐富的示例代碼,希望可以更好地幫助大家了解如何利用 Python 操縱窗口
    2023-11-11
  • 序列化Python對象的方法

    序列化Python對象的方法

    這篇文章主要介紹了序列化Python對象的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • Django中的“惰性翻譯”方法的相關(guān)使用

    Django中的“惰性翻譯”方法的相關(guān)使用

    這篇文章主要介紹了Django中的“惰性翻譯”方法的相關(guān)使用,Django是最具人氣的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Django管理員賬號和密碼忘記的完美解決方法

    Django管理員賬號和密碼忘記的完美解決方法

    這篇文章主要給大家介紹了關(guān)于Django管理員賬號和密碼忘記的完美解決方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-12-12
  • python3?chromedrivers簽到的簡單實現(xiàn)

    python3?chromedrivers簽到的簡單實現(xiàn)

    本文主要介紹了python3?chromedrivers簽到的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • Python實現(xiàn)農(nóng)歷轉(zhuǎn)換教程詳解

    Python實現(xiàn)農(nóng)歷轉(zhuǎn)換教程詳解

    農(nóng)歷,是我國現(xiàn)行的傳統(tǒng)歷法。它是根據(jù)月相的變化周期,每一次月相朔望變化為一個月,參考太陽回歸年為一年的長度,并加入二十四節(jié)氣與設(shè)置閏月以使平均歷年與回歸年相適應(yīng)。本文將用Python實現(xiàn)農(nóng)歷轉(zhuǎn)換,需要的可以參考一下
    2022-03-03

最新評論