用到的库是这个:https://github.com/acheong08/ChatGPT
需要装个库:pip3 install revChatGPT==0.0.a42
image.png (30.57 KB, 下载次数: 0)
下载附件
2022-12-12 21:23 上传
image.png (39.81 KB, 下载次数: 0)
下载附件
2022-12-12 21:23 上传
同目录还需要一个“config.json”:
[Asm] 纯文本查看 复制代码{
"session_token": "",
"cf_clearance": "",
"user_agent": ""
}
Python代码:
[Python] 纯文本查看 复制代码
from tkinter import *
from tkinter.ttk import *
import json
# from chatgpt_wrapper import ChatGPT
# from revChatGPT.revChatGPT import Chatbot
# pip3 install revChatGPT==0.0.a42
from revChatGPT.revChatGPT import AsyncChatbot as Chatbot
import asyncio
class WinGUI(Tk):
def __init__(self):
super().__init__()
self.__win()
self.tk_button_send = self.__tk_button_send()
self.tk_input_inputs = self.__tk_input_inputs()
self.tk_text_show = self.__tk_text_show()
self.tk_label_note = self.__tk_label_note()
self.process_done = False
def __win(self):
self.title("ChatGPT GUI")
# 设置窗口大小、居中
width = 500
height = 445
screenwidth = self.winfo_screenwidth()
screenheight = self.winfo_screenheight()
geometry = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
self.geometry(geometry)
self.resizable(width=False, height=False)
def __tk_button_send(self):
btn = Button(self, text="发送")
btn.place(x=420, y=20, width=60, height=40)
return btn
def __tk_input_inputs(self):
ipt = Entry(self)
ipt.place(x=20, y=20, width=380, height=40)
return ipt
def __tk_text_show(self):
text = Text(self)
text.place(x=20, y=103, width=460, height=336)
return text
def __tk_label_note(self):
label = Label(self,text="",anchor="center")
label.place(x=20, y=70, width=460, height=24)
return label
class Win(WinGUI):
def __init__(self):
super().__init__()
self.config(menu=self.create_menu())
self.__event_bind()
self.chatbot = Chatbot(json.loads(open('config.json', 'r').read()), conversation_id=None)
self.update_note('welcome!')
def create_menu(self):
menu = Menu(self,tearoff=False)
return menu
def update_show(self, strings):
self.tk_text_show.delete('1.0', END)
self.tk_text_show.insert('1.0', strings)
self.tk_text_show.update()
def update_note(self, strings):
self.tk_label_note.config(text=strings)
async def wait_for_response(self, inputs):
self.update_show('')
async for i in await self.chatbot.get_chat_response(inputs, output="stream"):
print(i['message'])
self.update_show(i['message'])
self.process_done = True
self.update_note('回复完成!')
def bot_ask(self, evt):
print("点击事件", evt)
inputs = self.tk_input_inputs.get().strip()
self.process_done = False
if inputs:
self.update_note(f'>> 输入内容为:{inputs}, 等待回复中...')
asyncio.run(self.wait_for_response(inputs))
else:
self.update_note('>> 请先输入内容。')
def __event_bind(self):
self.tk_button_send.bind('[B]',self.bot_ask)
if __name__ == "__main__":
win = Win()
win.mainloop()