最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Tkinter實(shí)現(xiàn)軟件自動(dòng)更新與提醒

 更新時(shí)間:2023年07月31日 11:11:56   作者:小鋒學(xué)長(zhǎng)生活大爆炸  
這篇文章主要為大家詳細(xì)介紹了Python如何利用Tkinter編寫(xiě)一個(gè)軟件自動(dòng)更新與提醒小程序,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以動(dòng)手嘗試一下

示例演示

參考代碼

import os
import _thread
import shutil
import subprocess
import sys
import requests
from tkinter import Tk, Label, IntVar, DoubleVar, HORIZONTAL, messagebox
from tkinter.ttk import Progressbar
import pyautogui
class SoftUpdateDialog:
    def __init__(self, soft_version):
        self.soft_update_url = 'http://xfxuezhang.cn/web/share/version/update_demo'
        self.soft_version = soft_version
    def init_ui(self, root):
        self.root = root
        self.root.title('軟件更新')
        self.root.geometry('300x100')
        self.progress_var = IntVar()
        self.label_var = DoubleVar()
        self.label_var.set(0.0)
        label = Label(self.root, text='正在更新軟件,請(qǐng)等待···')
        label.pack(pady=5)
        self.progress_bar = Progressbar(self.root, length=200, mode='indeterminate')
        self.progress_bar.pack(pady=5)
    def tip_show(self, msg):
        """消息提示"""
        messagebox.showwarning('提示', msg)
    def soft_download_with_thread(self):
        '''開(kāi)線程下載'''
        # 下載txt文件
        url = self.soft_update_url
        try:
            req = requests.get(url, stream=True, verify=False)
        except Exception:
            self.tip_show('請(qǐng)檢查網(wǎng)絡(luò)設(shè)置,無(wú)法檢測(cè)到網(wǎng)絡(luò)連接')
            return
        if req is None or str(req.status_code) != '200':
            self.tip_show('軟件更新失敗,請(qǐng)檢查網(wǎng)絡(luò)設(shè)置,無(wú)法檢測(cè)到網(wǎng)絡(luò)連接')
            return
        json_result = req.json()
        # 版本比對(duì)
        latest_version = json_result['soft_version']
        latest_soft_url = json_result['soft_url']
        if self.compare_version(latest_version):
            # 下載進(jìn)度工具條
            self.progress_var.set(0)
            self.progress_bar.start(60)
            # self._soft_download(latest_soft_url, latest_version)
            # 軟件下載線程
            _thread.start_new_thread(self._soft_download, (latest_soft_url, latest_version))
    def check_version(self):
        url = self.soft_update_url
        try:
            req = requests.get(url, stream=True, verify=False)
        except Exception:
            self.tip_show('請(qǐng)檢查網(wǎng)絡(luò)設(shè)置,無(wú)法檢測(cè)到網(wǎng)絡(luò)連接')
            return
        if req is None or str(req.status_code) != '200':
            self.tip_show('軟件更新失敗,請(qǐng)檢查網(wǎng)絡(luò)設(shè)置,無(wú)法檢測(cè)到網(wǎng)絡(luò)連接')
            return
        json_result = req.json()
        # 版本比對(duì)
        latest_version = json_result['soft_version']
        return self.compare_version(latest_version)
    def _update_progressbar(self):
        '''更新進(jìn)度條'''
        self.progress_bar['value'] = self.label_var.get()
    def _end_update(self):
        '''結(jié)束更新'''
        self.progress_bar.stop()
        self.root.destroy()
    def get_remote_file_size(self, url, proxy=None):
        """通過(guò)content-length頭獲取遠(yuǎn)程文件大小"""
        try:
            req = requests.head(url, proxies={'http': proxy, 'https': proxy} if proxy else None, verify=False)
            fileSize = int(req.headers.get('Content-Length', 0))
            return fileSize
        except Exception:
            return 0
    def _soft_download(self, latest_url, latest_version):
        '''軟件下載'''
        self.label_var.set(0.0)
        lastest_name = os.path.basename(latest_url)
        lastest_size = self.get_remote_file_size(latest_url)
        start_size = 0
        with requests.get(latest_url, stream=True, verify=False) as r:
            with open(lastest_name, "wb") as f:
                for chunk in r.iter_content(chunk_size=1024):
                    if not chunk:
                        continue
                    start_size += len(chunk)
                    f.write(chunk)
                    f.flush()
                    self.label_var.set(100.0 * start_size / lastest_size)
        print('>> ok')
        self._end_update()
    def compare_version(self, latest_version):
        return int(self.soft_version.replace('.', '')) < int(latest_version.replace('.', ''))
if __name__ == '__main__':
    app = Tk()
    app.geometry('0x0')
    soft_dialog = SoftUpdateDialog(soft_version='0.0.5')
    if soft_dialog.check_version() and pyautogui.confirm(text='有新版本,是否更新', title='通知', buttons=['OK', 'Cancel'])=='OK':
        soft_dialog.init_ui(root=app)
        soft_dialog.soft_download_with_thread()
        app.mainloop()
        pyautogui.alert(text='下載完成!', title='通知', button='好的????')

遠(yuǎn)程服務(wù)器的文件格式:

{
  "soft_version": "1.0.0",
  "soft_url": "http://xfxuezhang.cn/web/share/version/update_demo.exe"
}

到此這篇關(guān)于Python+Tkinter實(shí)現(xiàn)軟件自動(dòng)更新與提醒的文章就介紹到這了,更多相關(guān)Python Tkinter軟件自動(dòng)更新提醒內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深度學(xué)習(xí)TextLSTM的tensorflow1.14實(shí)現(xiàn)示例

    深度學(xué)習(xí)TextLSTM的tensorflow1.14實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了深度學(xué)習(xí)TextLSTM的tensorflow1.14實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • pandas讀取excel,txt,csv,pkl文件等命令的操作

    pandas讀取excel,txt,csv,pkl文件等命令的操作

    這篇文章主要介紹了pandas讀取excel,txt,csv,pkl文件等命令的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • Python制作爬蟲(chóng)抓取美女圖

    Python制作爬蟲(chóng)抓取美女圖

    本文主要介紹了Python制作爬蟲(chóng)抓取美女圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2016-01-01
  • Python3+pycuda實(shí)現(xiàn)執(zhí)行簡(jiǎn)單GPU計(jì)算任務(wù)

    Python3+pycuda實(shí)現(xiàn)執(zhí)行簡(jiǎn)單GPU計(jì)算任務(wù)

    GPU的加速技術(shù)在深度學(xué)習(xí)、量子計(jì)算領(lǐng)域都已經(jīng)被廣泛的應(yīng)用。這篇文章就來(lái)和大家聊聊Python3如何利用pycuda執(zhí)行簡(jiǎn)單GPU計(jì)算任務(wù)?,感興趣的可以了解一下
    2023-03-03
  • python中heapq堆排算法的實(shí)現(xiàn)

    python中heapq堆排算法的實(shí)現(xiàn)

    這篇文章主要介紹了python中heapq堆排算法的實(shí)現(xiàn),該模塊提供了堆排序算法的實(shí)現(xiàn)。堆是二叉樹(shù),最大堆中父節(jié)點(diǎn)大于或等于兩個(gè)子節(jié)點(diǎn),最小堆父節(jié)點(diǎn)小于或等于兩個(gè)子節(jié)點(diǎn)。下面文章更多詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Python操作Sqlite正確實(shí)現(xiàn)方法解析

    Python操作Sqlite正確實(shí)現(xiàn)方法解析

    我們今天將會(huì)在這篇文章中分步驟為大家詳細(xì)介紹一下有關(guān)Python操作Sqlite的相關(guān)應(yīng)用方式,希望大家可以從中獲得一些幫助
    2020-02-02
  • python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法

    python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法

    在本篇文章里小編給大家整理了一篇關(guān)于python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • 使用Python讀寫(xiě)多個(gè)sheet文件

    使用Python讀寫(xiě)多個(gè)sheet文件

    這篇文章主要介紹了使用Python讀寫(xiě)多個(gè)sheet文件,本文即介紹多個(gè)sheet文件的讀入及處理數(shù)據(jù)后寫(xiě)出到新excel文件的操作過(guò)程,可以提高大家工作效率,需要的小伙伴可以參考一下
    2022-05-05
  • Python 對(duì)象中的數(shù)據(jù)類(lèi)型

    Python 對(duì)象中的數(shù)據(jù)類(lèi)型

    對(duì)于python,一切事物都是對(duì)象,程序中存儲(chǔ)的所有數(shù)據(jù)都是對(duì)象,對(duì)象基于類(lèi)創(chuàng)建。這篇文章主要介紹了Python 對(duì)象之?dāng)?shù)據(jù)類(lèi)型 ,需要的朋友可以參考下
    2017-05-05
  • python入門(mén)學(xué)習(xí)筆記分享

    python入門(mén)學(xué)習(xí)筆記分享

    這篇文章主要介紹了關(guān)于Python的一些總結(jié),希望自己以后在學(xué)習(xí)Python的過(guò)程中可以邊學(xué)習(xí)邊總結(jié),就自己之前的學(xué)習(xí)先做以總結(jié),之后將不斷總結(jié)更新
    2021-10-10

最新評(píng)論

宜昌市| 河间市| 翁源县| 岑巩县| 蓬溪县| 舞钢市| 手机| 元朗区| 碌曲县| 锦屏县| 长兴县| 吉木萨尔县| 荆州市| 九龙县| 诸城市| 湟中县| 司法| 额尔古纳市| 靖远县| 东源县| 商南县| 于都县| 海口市| 西林县| 乐亭县| 榆林市| 田东县| 上栗县| 朝阳区| 册亨县| 秭归县| 湘潭县| 乐陵市| 卢湾区| 栾城县| 洛南县| 隆回县| 顺昌县| 井冈山市| 宝应县| 兴仁县|