完整自动化版本检测和日志更新提示,程序启动后先检查服务器版本号是否与当前版本号一致,如果不一致则自动关闭主界面弹出下载更新界面并显示更新或新增功能,若点击暂不更新则显示主界面,点击立即更新据关闭主界面前往下载地址。 import tkinter as tk from tkinter import messagebox, scrolledtext import requests import threading import webbrowser from packaging import version from datetime import datetime class VersionChecker: def __init__(self): self.current_ver = "1.0.0" self.version_url = "http://www.mrnsht.com/version.txt" self.download_url = "http://www.mrnsht.com/download"
self.changelog = """1. 新增自动战斗系统 2. 修复登录异常问题 3. 优化内存占用表现 4. 增加任务追踪功能 5. 改进用户界面交互"""
self.root = tk.Tk() self.root.iconbitmap(r"C:UsersAdministratorDesktoporehaicon.ico") self.root.resizable(False, False) self.root.withdraw() self.setup_ui_components() threading.Thread(target=self.check_update, daemon=True).start() self.root.mainloop() def setup_ui_components(self): self.root.title("版本号检测+更新日志") self.root.geometry("450x500")
# 主界面内容 main_frame = tk.Frame(self.root) main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)
tk.Label(main_frame, text="游戏自动化工具", font=("Arial", 16, "bold"), pady=20).pack()
# 新增功能按钮 btn_frame = tk.Frame(main_frame) btn_frame.pack(pady=10)
tk.Button(btn_frame, text="开始任务", command=self.start_task, width=15).pack(side=tk.LEFT, padx=5) tk.Button(btn_frame, text="停止任务", command=self.stop_task, width=15).pack(side=tk.LEFT, padx=5)
# 固定底部的日志区域 self.log_frame = tk.Frame(self.root, height=150, bg="white") self.log_frame.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=False, padx=10, pady=5)
tk.Label(self.log_frame, text="操作日志:", font=("Arial", 11, "bold"), bg="lightgray").pack(fill=tk.X)
self.log_area = scrolledtext.ScrolledText( self.log_frame, height=6, width=60, wrap="word", state="disabled", font=("Consolas", 10) ) self.log_area.pack(fill=tk.BOTH, expand=True) def start_task(self): self.log_message("任务已开始执行")
def stop_task(self): self.log_message("任务已停止") def log_message(self, message): timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") self.root.after(0, self._safe_log_update, f"[{timestamp}] {message} def _safe_log_update(self, message): self.log_area.config(state="normal") self.log_area.insert("end", message) self.log_area.config(state="disabled") self.log_area.see("end") def check_update(self): try: ver_response = requests.get(self.version_url, timeout=5) latest_ver = ver_response.text.strip() if version.parse(self.current_ver) < version.parse(latest_ver): self.root.after(0, self.show_update_dialog, latest_ver) else: self.root.after(0, self.show_main_ui) except Exception as e: self.root.after(0, self.show_main_ui) def show_main_ui(self): self.root.deiconify() def show_update_dialog(self, new_version): dialog = tk.Toplevel() dialog.title("软件更新提示") dialog.geometry("450x400")
tk.Label(dialog, text="检测到新版本可用", font=("Arial", 12, "bold")).pack(pady=10)
tk.Label(dialog, text="更新内容:", font=("Arial", 11, "bold"), fg="red").pack(anchor="w", padx=20)
text_frame = tk.Frame(dialog) text = tk.Text(text_frame, height=10, width=50, wrap="word") scrollbar = tk.Scrollbar(text_frame, command=text.yview) text.config(yscrollcommand=scrollbar.set)
text.insert("end", self.changelog) text.config(state="disabled")
scrollbar.pack(side="right", fill="y") text.pack(side="left", fill="both", expand=True) text_frame.pack(fill="both", expand=True, padx=20, pady=5)
btn_frame = tk.Frame(dialog) tk.Button(btn_frame, text="立即更新", command=lambda: self.update_action(dialog, True), width=10).pack(side="left", padx=10) tk.Button(btn_frame, text="以后再说", command=lambda: self.update_action(dialog, False), width=10).pack(side="left", padx=10) btn_frame.pack(pady=15) def update_action(self, dialog, confirm): dialog.destroy() if confirm: webbrowser.open(self.download_url) self.root.destroy() else: self.show_main_ui() if __name__ == "__main__": VersionChecker() |