ChatGPT聊天机器人:使用Python和Tkinter构建简单的聊天界面
这是一个使用 Python 和 Tkinter 库构建的简单 ChatGPT 聊天界面。该程序可以向 ChatGPT 发送文本消息并接收回复,并将聊天历史记录保存到本地文件。
以下是代码的详细解释:
import tkinter as tk
from tkinter import messagebox
import requests
from tkinter import ttk
chat_history = []
def send_message():
global chat_history
message_text = message_entry.get()
if not message_text:
return
# 获取前10次的对话记录
last_10_messages = chat_history[-20:]
chat_history.append(f'你: {message_text}\n')
# 拼接消息和历史记录
message_with_history = '\n'.join(last_10_messages) + chat_history[-1]
# 判断消息长度是否超过4000字符
while len(message_with_history.encode('utf-8')) > 4000:
last_10_messages.pop(0)
message_with_history = '\n'.join(last_10_messages) + chat_history[-1]
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_with_history})
if response.status_code == 200:
response_text = response.text
chat_history.append(f'chatgpt: {response_text}\n\n')
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()
使用方法:
- 确保你已经安装了
requests和tkinter库。 - 运行 Python 代码。
- 在文本框中输入你的消息,然后点击“发送”按钮。
- 程序会将消息发送给 ChatGPT,并在聊天框中显示 ChatGPT 的回复。
- 聊天历史记录会保存到
chat_history.txt文件中。
注意:
- 该程序使用了
requests库发送网络请求,需要确保你的网络连接正常。 - ChatGPT 的 API 接口需要付费使用,请参考 ChatGPT 的官方文档了解更多信息。
- 由于 ChatGPT 的回复可能包含 Markdown 格式的文本,该程序无法直接显示 Markdown 格式的文本。你可以在聊天历史记录中保存 Markdown 格式的对话,并在需要的时候打开它们。如果你需要在 Python 代码中处理 Markdown 格式的文本,可以使用第三方库
markdown。
代码的功能:
- 构建一个简单的聊天界面,包括聊天框、输入框、发送按钮和等待标签。
- 向 ChatGPT 发送消息并接收回复。
- 将聊天历史记录保存到本地文件。
- 使用 Material Design 颜色主题。
- 使用 ttk 库创建样式。
- 使用
bind方法绑定 Enter 键发送消息。 - 使用
yscrollcommand和command属性设置滚动条。 - 使用
encode('utf-8')方法解决中文编码问题。 - 使用
while循环判断消息长度是否超过 4000 字符。 - 使用
messagebox库显示错误信息。
未来改进方向:
- 支持 Markdown 格式的文本显示。
- 支持更多种聊天界面风格。
- 支持用户自定义聊天历史记录保存路径。
- 支持多语言聊天。
- 支持与其他聊天机器人平台集成。
原文地址: https://www.cveoy.top/t/topic/lIJ8 著作权归作者所有。请勿转载和采集!