ChatGPT_GUI-Python

ChatGPT_GUI-Python

import openai
import tkinter as tk
from tkinter import messagebox
import requests
from bs4 import BeautifulSoup
import urllib.request
from tqdm import tqdm
import sys
import webbrowser

# 你的 OpenAI API 密钥
your_api_key = "你的API"
# 服务器上的版本信息页面
server_version_url = "https://pychat.ksmlc.cn/index.html"
server_update_url = "https://pychat.ksmlc.cn/exe/ai.exe"

Current_Version = 1.1
# 获取服务器上的最新版本
try:
    response = requests.get(server_version_url)
    # 使用 BeautifulSoup 解析 HTML
    soup = BeautifulSoup(response.text, 'html.parser')
    # 假设版本信息在 HTML 页面的某个元素中,例如 <span id="version">1.1</span>
    version_element = soup.find('span', {'id': 'version'})
    if version_element:
        latest_version = version_element.text
    else:
        latest_version = None
except requests.RequestException as e:
    messagebox.showerror("错误", f"无法获取最新版本:{e}")
    latest_version = None  # 不设置默认版本号,保持 latest_version 为 None
print(f"当前客户端的版本号:{Current_Version}")
print(f"服务器上的最新版本号:{latest_version}")

# 如果需要更新
if latest_version is not None and float(latest_version) > Current_Version:
    # 提示用户更新
    user_response = messagebox.askyesno("更新", f"发现新版本 {latest_version},是否更新?")
    if user_response:
        # 下载并安装更新
        try:
            # 获取更新文件的URL
            update_url = "https://pychat.ksmlc.cn/exe/ai.exe"
            # 下载更新文件
            with urllib.request.urlopen(update_url) as response, \
                    open(f"KS-MLC_ChatGPT_{latest_version}.exe", 'wb') as out_file:
                # 获取文件大小
                file_size = int(response.info().get('Content-Length', -1))
                # 初始化 tqdm 进度条
                progress = tqdm(total=file_size, unit='B', unit_scale=True, unit_divisor=1024)

                # 下载文件并显示进度
                while True:
                    data = response.read(1024)
                    if not data:
                        break
                    out_file.write(data)
                    progress.update(len(data))

                progress.close()  # 关闭进度条

            # 提示用户更新已成功下载
            messagebox.showinfo("下载成功", "更新文件已成功下载。")

            # 在这里可以添加安装更新的逻辑,例如替换当前的应用程序文件

            # 提示用户更新已成功安装
            messagebox.showinfo("更新成功", f"在当前目录下会生成KS-MLC_ChatGPT_{latest_version}.exe文件,这个文件就是最新版本,可以把之前版本替换掉。")
        except Exception as e:
            messagebox.showerror("更新失败", f"无法下载或安装更新:{e}")
            # 强制退出程序
            sys.exit()
    else:
        # 用户选择不更新的情况
        messagebox.showinfo("取消更新", "用户选择不更新,当前版本未受影响。")
        # 强制退出程序
        sys.exit()
else:
    # 没有更新的情况
    messagebox.showinfo("无更新", "当前版本已经是最新版本。")

    # 创建主窗口
    root = tk.Tk()
    root.title("ChatGPT GUI")

    # 创建标签和输入框(API密钥)
    api_key_label = tk.Label(root, text="请输入您的OpenAI API密钥:")
    api_key_label.pack(pady=5)
    api_key_entry = tk.Entry(root, show="*", width=50)
    api_key_entry.pack(pady=10)

    # 创建标签和输入框(问题)
    question_label = tk.Label(root, text="请输入您的问题:")
    question_label.pack(pady=5)
    question_entry = tk.Entry(root, width=50)
    question_entry.pack(pady=10)

    # 创建标签和输入框(密码)
    password_label = tk.Label(root, text="请输入密码以自动填写API密钥:")
    password_label.pack(pady=5)
    password_entry = tk.Entry(root, show="*", width=50)
    password_entry.pack(pady=10)

    # 创建文本框,用于显示回答
    output_text = tk.Text(root, height=10, width=70, wrap=tk.WORD)
    output_text.pack(pady=10)

    # 定义获取回答的函数
    def get_response():
        # 获取用户输入的问题和 API 密钥
        user_question = question_entry.get()
        user_api_key = api_key_entry.get()

        if user_api_key:
            # 用户手动填写了 API 密钥
            openai.api_key = user_api_key
        else:
            messagebox.showwarning("警告", "请手动填写API密钥!")
            return

        if user_question:
            # 向 OpenAI 发起请求
            response = openai.Completion.create(
                engine="text-davinci-003",
                prompt=f"用户: {user_question}\n",
                max_tokens=100
            )

            # 获取回答
            answer = response.choices[0].text.strip()

            # 在文本框中显示回答
            output_text.tag_configure("user", foreground="blue")
            output_text.tag_configure("gpt", foreground="green")

            output_text.config(state=tk.NORMAL)
            output_text.insert(tk.END, f"用户: {user_question}\n", "user")
            output_text.insert(tk.END, f"GPT: {answer}\n\n", "gpt")
            output_text.config(state=tk.DISABLED)
            output_text.see(tk.END)  # 滚动到文本框底部,显示最新的回答
        else:
            messagebox.showwarning("警告", "请填写问题!")

    # 创建按钮(获取回答)
    button = tk.Button(root, text="获取回答", command=get_response)
    button.pack(pady=10)

    # 定义函数(自动填充 API 密钥)
    def fill_api_key():
        password = password_entry.get()

        if password == "你设置的密码":
            # 密码正确,尝试自动填写 API 密钥
            api_key_entry.delete(0, tk.END)  # 清空原有的内容
            api_key_entry.insert(0, your_api_key)  # 自动填写 API 密钥
            password_entry.delete(0, tk.END)  # 清空密码输入框
        else:
            # 密码不正确,清空 API 密钥输入框
            api_key_entry.delete(0, tk.END)
            messagebox.showwarning("警告", "密码不正确,请手动填写API密钥!")

    # 创建按钮(自动填充 API 密钥)
    fill_api_key_button = tk.Button(root, text="自动填充API密钥", command=fill_api_key)
    fill_api_key_button.pack(pady=10)

    # 创建按钮(打开个人网站)
    def open_personal_website():
        webbrowser.open("https://ksmlc.cn")  # 替换为你的个人网站URL

    open_website_button = tk.Button(root, text="打开开发者的网站", command=open_personal_website)
    open_website_button.pack(pady=10)

    # 运行主循环
    root.mainloop()

验证版本html填写

<p>当前版本: <span id="version">1.1</span></p>
<p>最新版本: <span id="latest_version">1.2</span></p>
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容