import tkinter as tk from tkinter import messagebox import requests from tkinter import ttk

from datetime import datetime

chat_history = []

def send_message(): global chat_history

message_text = message_entry.get()
if not message_text:
    return

chat_history.append(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

你: {message_text} ")

chat_box.config(state=tk.NORMAL)
chat_box.insert(tk.END, chat_history[-1], 'right_align')
chat_box.see(tk.END)
chat_box.config(state=tk.DISABLED)
message_entry.delete(0, tk.END)

# 显示动态等待效果
wait_label.config(text="等待响应中...", fg="gray")
root.update()

# 发送网络请求
response = requests.get("https://chatgpt-chatpt-zggoappkts.cn-beijing.fcapp.run", params={"content": message_text})

if response.status_code == 200:
    response_text = response.text
    chat_history.append(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}

chatgpt: {response_text}

") chat_box.config(state=tk.NORMAL) chat_box.insert(tk.END, chat_history[-1], 'left_align') chat_box.see(tk.END) chat_box.config(state=tk.DISABLED) wait_label.config(text="")

    # 保存消息到本地
    with open('chat_history.txt', 'a') as f:
        f.write(chat_history[-2])
        f.write(chat_history[-1])
else:
    messagebox.showerror("错误", f"服务器状态码 {response.status_code}")
    wait_label.config(text="")

def load_chat_history(): try: with open('chat_history.txt', 'r') as f: chat_history.extend(f.readlines()) chat_box.config(state=tk.NORMAL) for message in chat_history: if message.startswith("你:"): chat_box.insert(tk.END, message, 'right_align') elif message.startswith("chatgpt:"): chat_box.insert(tk.END, message, 'left_align') chat_box.see(tk.END) chat_box.config(state=tk.DISABLED) except FileNotFoundError: pass

root = tk.Tk() root.title("Chatgpt by 果然多cc果卷")

添加样式

style = ttk.Style() style.configure('right_align.TLabel', anchor='e') style.configure('left_align.TLabel', anchor='w') style.configure('center_align.TLabel', justify='center')

Material Design 颜色定义(蓝色)

primary_color = "#2196f3" light_primary_color = "#6ec6ff" dark_primary_color = "#0069c0" text_primary_color = "#ffffff" accent_color = "#4caf50"

创建聊天界面

chat_frame = tk.Frame(root, bg=primary_color) chat_frame.pack(pady=(15, 0), fill='both', expand=True)

chat_box = tk.Text(chat_frame, height=20, width=50, state=tk.DISABLED, font=('Arial', 12), bg="white", fg="black", highlightbackground="#c5c5c5", highlightthickness=1) chat_box.pack(side=tk.LEFT, padx=(0, 10), pady=(0, 5), fill='both', expand=True)

scrollbar = tk.Scrollbar(chat_frame) scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

message_entry = tk.Entry(root, width=50, font=('Arial', 12), relief='flat') message_entry.pack(padx=10, pady=10, ipady=8, fill='x')

send_button = tk.Button(root, text="发送", command=send_message, font=('Arial', 12), bg=accent_color, fg=text_primary_color, bd=0, padx=20, pady=10) send_button.pack(side=tk.BOTTOM, padx=10, pady=(0, 10))

wait_label = tk.Label(root, text="", font=('Arial', 12), fg=primary_color) wait_label.pack(pady=(0, 10))

chat_box.tag_configure('right_align', foreground=light_primary_color, font=('Arial', 12, 'bold')) chat_box.tag_configure('left_align', foreground=dark_primary_color, font=('Arial', 12, 'bold')) chat_box.tag_configure('center_align', font=('Arial', 12))

chat_box.config(yscrollcommand=scrollbar.set) scrollbar.config(command=chat_box.yview)

load_chat_history() # 加载聊天历史记录

设置窗口背景颜色和大小

root.configure(bg=primary_color) root.geometry("400x550") root.resizable(False, False) root.bind('', lambda event: send_button.invoke())

root.mainloop()

可以,只需要将发送的消息改成符合要求的格式即可。例如:

message_text = "你:你更喜欢猫还是狗?\nAI:猫。为什么?" chat_history.append(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} {message_text} ")

Python Tkinter 实现 ChatGPT 聊天机器人

原文地址: https://www.cveoy.top/t/topic/lIJD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录