Python+Tkinter實(shí)現(xià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)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
pandas讀取excel,txt,csv,pkl文件等命令的操作
這篇文章主要介紹了pandas讀取excel,txt,csv,pkl文件等命令的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03
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),該模塊提供了堆排序算法的實(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)方法解析
我們今天將會(huì)在這篇文章中分步驟為大家詳細(xì)介紹一下有關(guān)Python操作Sqlite的相關(guān)應(yīng)用方式,希望大家可以從中獲得一些幫助2020-02-02
python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法
在本篇文章里小編給大家整理了一篇關(guān)于python3中編碼獲取網(wǎng)頁(yè)的實(shí)例方法,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11
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

