Python Tkinter 聊天机器人:使用 ChatGPT 实现实时对话
以下 Python 代码使用 Tkinter 库构建了一个简单的聊天机器人界面,连接 ChatGPT API,实现实时对话功能。代码支持聊天记录保存和加载,并提供友好的用户界面。
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用于发送网络请求。ttk用于创建样式化部件。datetime用于获取当前时间。
- 定义
chat_history列表:用于存储聊天记录。 - 定义
send_message()函数:- 获取用户输入信息,并将其追加到
chat_history列表中。 - 更新聊天框,显示用户输入的信息。
- 发送网络请求到 ChatGPT API。
- 处理服务器响应,将 ChatGPT 的回复追加到
chat_history列表中。 - 更新聊天框,显示 ChatGPT 的回复。
- 将聊天记录保存到本地文件。
- 获取用户输入信息,并将其追加到
- 定义
load_chat_history()函数:- 从本地文件加载聊天记录。
- 更新聊天框,显示聊天历史记录。
- 创建主窗口
root:- 设置窗口标题。
- 创建样式
style:- 定义聊天框中不同对齐方式的样式。
- 定义 Material Design 颜色:
- 设置主色、亮色、深色、文字颜色和强调色。
- 创建聊天界面
chat_frame:- 设置背景颜色。
- 创建聊天框
chat_box:- 设置高度、宽度、不可编辑状态、字体、背景颜色、前景色、边框颜色和边框厚度。
- 创建滚动条
scrollbar:- 设置位置和填充方式。
- 创建输入框
message_entry:- 设置宽度、字体、边框样式。
- 创建发送按钮
send_button:- 设置文本、命令、字体、背景颜色、前景色、边框样式、填充方式。
- 创建等待标签
wait_label:- 设置文本、字体、前景色。
- 定义聊天框中的标签样式:
right_align:右对齐,亮色文字,粗体字体。left_align:左对齐,深色文字,粗体字体。center_align:居中对齐,普通字体。
- 设置滚动条和聊天框之间的关联:
- 滚动条控制聊天框的滚动。
- 加载聊天历史记录:
- 调用
load_chat_history()函数。
- 调用
- 设置窗口背景颜色和大小:
- 设置窗口背景颜色和尺寸。
- 绑定回车键事件:
- 按下回车键时触发发送按钮的点击事件。
- 启动主循环:
- 运行 GUI 界面。
注意事项
- 本代码中使用了
https://chatgpt-chatpt-zggoappkts.cn-beijing.fcapp.run作为 ChatGPT API 的地址,请确保您的 API 地址正确。 - 您可以根据需要修改代码中定义的颜色和样式。
- 聊天记录保存到
chat_history.txt文件中,您也可以根据需要修改文件路径。
功能拓展
- 可以添加更多功能,例如:
- 使用其他 ChatGPT API。
- 添加语音输入功能。
- 添加更多样式和主题。
- 实现多窗口聊天功能。
希望以上代码和解释能够帮助您构建自己的 Python Tkinter 聊天机器人!
原文地址: https://www.cveoy.top/t/topic/lIJF 著作权归作者所有。请勿转载和采集!