Python Tkinter 实现简单 ChatGPT 聊天界面
以下代码使用 Python Tkinter 库构建了一个简单的 ChatGPT 聊天界面,实现用户与 ChatGPT 的实时对话功能,并保存聊天记录。
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('<Return>', lambda event: send_button.invoke())
root.mainloop()
这段代码主要做了以下几件事:
- 导入必要的库:
tkinter用于创建 GUI 界面,messagebox用于显示错误提示,requests用于发送 HTTP 请求,ttk用于使用主题样式,datetime用于获取当前时间。 - 定义聊天记录列表:
chat_history用于存储聊天内容。 - 定义
send_message()函数:- 获取用户输入的消息。
- 将消息添加到聊天记录列表。
- 在聊天框中显示消息,并自动滚动到底部。
- 显示动态等待效果。
- 发送 HTTP 请求到 ChatGPT API,获取响应。
- 显示 ChatGPT 的响应消息。
- 保存聊天记录到本地文件。
- 定义
load_chat_history()函数:- 从本地文件加载聊天记录。
- 在聊天框中显示加载的聊天记录。
- 创建主窗口:
- 设置窗口标题。
- 创建聊天框、输入框、发送按钮、等待标签等组件。
- 绑定回车键发送消息。
- 设置样式和颜色:
- 使用
ttk.Style定义聊天框文字对齐方式。 - 使用 Material Design 颜色定义主题颜色。
- 使用
- 启动主循环:
root.mainloop()开始运行 GUI 应用程序。
这段代码是一个简单的 ChatGPT 聊天界面示例,你可以根据自己的需求进行修改和扩展。例如,你可以添加更多功能,例如:
- 使用不同的 ChatGPT API。
- 支持更多输入格式,例如语音输入。
- 自定义界面风格。
- 集成其他功能,例如翻译、写作等。
希望这段代码对你有所帮助。如果你有任何问题,请随时提问。
原文地址: https://www.cveoy.top/t/topic/lIJE 著作权归作者所有。请勿转载和采集!