Python开发一个ChatGPT GUI

1、首先去下载这个ChatGPT库,用到的库是这个:https://GitHub.com/acheong08/ChatGPT

2、安装这个ChatGPT库:

1

pip3 install revChatGPT==0.0.a42

3、同目录还需要一个“config.json”:

1

2

3

4

5

{

    "session_token""",

    "cf_clearance""",

    "user_agent"""

}

3、Python代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

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 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("<tk_button_send>点击事件", 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('<Button-1>',self.bot_ask)

          

if __name__ == "__main__":

    win = Win()

    win.mainloop()

猜你喜欢

转载自blog.csdn.net/winkexin/article/details/131017207
今日推荐