Python développe une interface graphique ChatGPT

1. Téléchargez d' abord la librairie ChatGPT, la librairie utilisée est celle-ci : https:// GitHub.com/acheong08/ChatGPT

2. Installez la bibliothèque ChatGPT :

1

pip3 install revChatGPT==0.0.a42

3. Le même répertoire a également besoin d'un "config.json":

1

2

3

4

5

{

    "session_token""",

    "cf_clearance""",

    "user_agent"""

}

3. Code Python :

1

2

3

4

5

6

7

8

9

dix

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()

Je suppose que tu aimes

Origine blog.csdn.net/winkexin/article/details/131017207
conseillé
Classement