在python中调用ChatGPT,并使用tkinter打包成exe

news2024/9/23 11:16:53

在python中调用ChatGpt

  • 一、前提
    • 1. 安装库
    • 2. 获取key
    • 3. 调用示例
  • 二、tkinter桌面应用
  • 网页使用与python使用的对比

用它来搜题你将会知道什么叫爽

一、前提

小伙伴们都知道,最近这两天ChatGpt最近很火爆,更重要的是他对中文的兼容性很好,比如我问他一个问题:
在这里插入图片描述

关于它的注册方式可以看这篇文章:OpenAI 推出超神 ChatGPT 注册攻略来了,建议大家选择印度的手机号。
当我询问他如何在python中调用它时他给出了我这样的回复

在这里插入图片描述
在这里插入图片描述

下面我们直接步入正轨,开始调用

1. 安装库

pip install openai

调用的基本操作:

2. 获取key

这个很简单,就不在叙述了。获取key的时候一定要第一时间保存,要不然就看不了了,还得重新弄一个kry
在这里插入图片描述

3. 调用示例

如果你用中文在前面加上# coding: utf-8

import openai

# Set the API key for the openai module
openai.api_key = "<your API key>"#这里放入你的key,我这里隐藏了

# Use the GPT-3 model to generate text
prompt = "因子分析的定义"#这里放入自己的问题
response = openai.Completion.create(
    engine="text-davinci-002",
    prompt=prompt,
    max_tokens=1024,
    n=1,
    temperature=0.5,
)

# Print the generated text
print(response["choices"][0]["text"])

看下输出:

因子分析是一种统计学方法,旨在通过对原始数据进行分析来确定其中的隐含因子。这些因子可以被视为潜在的结构,可以帮助研究人员更好地理解数据。因子分析可以用于不同类型的数据,包括调查问卷、实验数据、心理测量数据等。

二、tkinter桌面应用

重要的事情说三遍,一定要有一个key才行
这是效果
在这里插入图片描述

# coding=utf-8
# sk - njzWsK9qzW2tKq9DUJHHT3BlbkFJbKQKRmFD4RRqpuySpBWX
import openai
# -*- coding:utf-8 -*-

import os, sys
from tkinter import *
from tkinter.font import Font
from tkinter.ttk import *

# Set the API key for the openai module
openai.api_key = "这里放入你的key"


class Application_ui(Frame):
    # 这个类仅实现界面生成功能,具体事件处理代码在子类Application中。
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.master.title('ChatGPT')
        self.master.geometry('955x500')
        self.createWidgets()

    def createWidgets(self):
        self.top = self.winfo_toplevel()

        self.style = Style()

        self.style.configure('Tftitle.TLabelframe', font=('楷体', 12))
        self.style.configure('Tftitle.TLabelframe.Label', font=('楷体', 12))
        self.ftitle = LabelFrame(self.top, text='人工智能Openai', style='Tftitle.TLabelframe')
        self.ftitle.place(relx=0.008, rely=0.017, relwidth=0.982, relheight=0.998)

        self.stext = Text(self.ftitle, font=('楷体', 12), wrap=NONE, )
        self.stext.place(relx=0.017, rely=0.036, relwidth=0.957, relheight=0.412)

        # 垂直滚动条
        self.VScroll1 = Scrollbar(self.stext, orient='vertical')
        self.VScroll1.pack(side=RIGHT, fill=Y)
        self.VScroll1.config(command=self.stext.yview)  # 将文本框关联到滚动条上,滚动条滑动,文本框跟随滑动
        self.stext.config(yscrollcommand=self.VScroll1.set)  # 将滚动条关联到文本框
        # 水平滚动条
        self.stextxscroll = Scrollbar(self.stext, orient=HORIZONTAL)
        self.stextxscroll.pack(side=BOTTOM, fill=X)  # side是滚动条放置的位置,上下左右。fill是将滚动条沿着y轴填充
        self.stextxscroll.config(command=self.stext.xview)  # 将文本框关联到滚动条上,滚动条滑动,文本框跟随滑动
        self.stext.config(xscrollcommand=self.stextxscroll.set)  # 将滚动条关联到文本框

        self.totext = Text(self.ftitle, font=('楷体', 12), wrap=NONE)
        self.totext.place(relx=0.017, rely=0.552, relwidth=0.957, relheight=0.412)

        self.VScroll2 = Scrollbar(self.totext, orient='vertical')
        self.VScroll2.pack(side=RIGHT, fill=Y)
        # 将滚动条与文本框关联
        self.VScroll2.config(command=self.totext.yview)  # 将文本框关联到滚动条上,滚动条滑动,文本框跟随滑动
        self.totext.config(yscrollcommand=self.VScroll2.set)  # 将滚动条关联到文本框
        # 水平滚动条
        self.totextxscroll = Scrollbar(self.totext, orient=HORIZONTAL)
        self.totextxscroll.pack(side=BOTTOM, fill=X)  # side是滚动条放置的位置,上下左右。fill是将滚动条沿着y轴填充
        self.totextxscroll.config(command=self.totext.xview)  # 将文本框关联到滚动条上,滚动条滑动,文本框跟随滑动
        self.totext.config(xscrollcommand=self.totextxscroll.set)  # 将滚动条关联到文本框

        def cut(editor, event=None):
            editor.event_generate("<<Cut>>")

        def copy(editor, event=None):
            editor.event_generate("<<Copy>>")

        def paste(editor, event=None):
            editor.event_generate('<<Paste>>')

        def rightKey(event, editor):
            menubar.delete(0, END)
            menubar.add_command(label='剪切', command=lambda: cut(editor))
            menubar.add_command(label='复制', command=lambda: copy(editor))
            menubar.add_command(label='粘贴', command=lambda: paste(editor))
            menubar.post(event.x_root, event.y_root)

        menubar = Menu(self.top, tearoff=False)  # 创建一个菜单
        self.stext.bind("<Button-3>", lambda x: rightKey(x, self.stext))  # 绑定右键鼠标事件
        self.totext.bind("<Button-3>", lambda x: rightKey(x, self.totext))  # 绑定右键鼠标事件

        self.style.configure('Tcleartext.TButton', font=('楷体', 12))
        self.cleartext = Button(self.ftitle, text='清空', command=self.cleartext_Cmd, style='Tcleartext.TButton')
        self.cleartext.place(relx=0.239, rely=0.463, relwidth=0.086, relheight=0.073)

        self.style.configure('Taddyh.TButton', font=('楷体', 12))
        self.addyh = Button(self.ftitle, text='点击查询', command=self.addyh_Cmd,
                            style='Taddyh.TButton')
        self.addyh.place(relx=0.512, rely=0.463, relwidth=0.2, relheight=0.073)


class Application(Application_ui):
    # 这个类实现具体的事件处理回调函数。界面生成代码在Application_ui中。
    def __init__(self, master=None):
        Application_ui.__init__(self, master)

    def cleartext_Cmd(self, event=None):
        # TODO, Please finish the function here!
        # 清空两个文本框
        self.stext.delete(1.0, "end")
        self.totext.delete(1.0, "end")

    def addyh_Cmd(self, event=None):
        # TODO, Please finish the function here!
        cookiestext = self.stext.get(1.0, "end")
        response = openai.Completion.create(
            engine="text-davinci-002",
            prompt=cookiestext,
            max_tokens=1024,
            n=1,
            temperature=0.5,
        )
        answer = (response["choices"][0]["text"]).split(".")
        for i in answer:
            self.totext.insert(1.0, i)

            self.totext.update()


if __name__ == "__main__":
    top = Tk()
    Application(top).mainloop()

注:本代码借鉴了一位老哥添加headers的代码,本人对此深表感谢

网页使用与python使用的对比

相比较之下还是感觉网页版更好。
在这里插入图片描述
在这里插入图片描述
更多功能需要你自己探索

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67478.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以“社交和品质”打通长线运营,UTONMOS打造真正的Web3.0链游破圈之作

元宇宙&#xff08;Metaverse&#xff09;&#xff0c;这个来源于科幻小说的概念已成为真实世界中的流行语。在大众对元宇宙的构想中&#xff0c;" 游戏 " 是优先级最高的落地场景之一。《头号玩家》《赛博朋克 2077》等作品中&#xff0c;" 游戏 " 也多次…

【20221206】【每日一题】01背包的基础

思路&#xff1a; 二维数组 动规五部曲 1、确定dp数组以及下标含义&#xff1a;二维数组dp[i][j]表示从下标为0-i的物品里任意取&#xff0c;放入容量为j的背包&#xff0c;价值总和最大为多少&#xff1b; 2、确定递推关系式&#xff1a;从两个方向推dp[i][j]&#xff0c;没…

CSS 之 渐变色边框

一、渐变色边框 如果我们前端最亲爱的UI设计师&#xff0c;让我们给盒子绘制一个渐变色的边框&#xff0c;而且盒子的宽高还需要随着内容变化而变化&#xff0c;那我们就不能通过切图来解决问题&#xff0c;所以我们可以这么说&#xff1a; 但是我相信优秀的你肯定不会说做不…

如何删除密码?知道密码和不知道密码的情况

压缩包设置了密码&#xff0c;就需要输入压缩包密码才能顺利解压文件。 有些时候我们加密了压缩包之后&#xff0c;过了一段时间可能就不需要再加密压缩包里的文件了。 有些时候我们加密了压缩包之后&#xff0c;长时间没有使用&#xff0c;又没有将密码记录在一个地方&#…

基于 LSTM 的分布式能源发电预测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

CNAME记录和A记录

文章目录定义CNAME使用说明总结定义 A记录&#xff1a;A (Address) 记录是用来指定主机名&#xff08;或域名&#xff09;对应的IP地址记录。CNAME记录&#xff1a;CName记录是Canonical Name的简称&#xff0c;通常称别名指向&#xff0c;CNAME记录可用于将一个域名别名为另一…

太强了!GitHub大佬白嫖的SpringCloud微服务进阶宝典,啃完感觉能吊锤面试官!

自 2014 年起&#xff0c;微服务技术一直火热至今。随着越来越完善的微服务技术栈的发布&#xff0c;以及越来越多的微服务项目实际的落地和上线&#xff0c;使用 Java 技术栈的企业应该都在尝试或者已经落地了各自的微服务项目。同时&#xff0c;通过招聘网站的信息和每次面试…

如何用蓝牙实现无线定位(五)--双定位显示

1. 机器人定位装置的构建 按照上面的针脚使用杜邦线将救援机器人定位装置的主从蓝牙连接到主控板上&#xff0c;注意错误的连接会导致模块损坏【参考视频】 2. 机器人位置的获取与发送 (1) 在机器人定位装置的控制板中烧录以下程序&#xff08;robot.ino&#xff09; /*-----…

深度解读汽车域控制器

已剪辑自: https://mp.weixin.qq.com/s?__bizMzg4NjIxODk4Mg&mid2247496089&idx1&sndb5c08f97342decfabc9ce985ec75aaa&chksmcf9fb810f8e83106994f2f2b9ca0387eaca7543d36b1673d4fc00bdfe07fbc5099322d41a702&scene21#wechat_redirect * * 过去十多年的…

华为机试-字符串合并处理

描述 按照指定规则对输入的字符串进行处理。 详细描述 第一步&#xff1a;将输入的两个字符串str1和str2进行前后合并。如给定字符串 “dec” 和字符串 “fab” &#xff0c; 合并后生成的字符串为 “decfab” 第二步&#xff1a;对合并后的字符串进行排序&#xff0c;要求…

拖拽式网页制作工具

拖拽式网页制作工具是什么&#xff0c;有什么优势&#xff0c;怎么使用&#xff1f; 拖拽式网页制作工具是什么: 它是一款可以帮助企业、机构、个体户快速搭建网站的一款工具&#xff0c;通过简单易上手的操作&#xff0c;免除学习代码、学习设计等繁琐步骤&#xff0c;利用工…

2022.12.2Treats for the Cows POJ - 3186(区间dp

原题链接&#xff1a;传送门 FJ has purchased N (1 < N < 2000) yummy treats for the cows who get money for giving vast amounts of milk. FJ sells one treat per day and wants to maximize the money he receives over a given period time. The treats are inte…

请不要直接拆除或更换旧光纤!Softing为您提供光纤以太网网络解决方案

Softing的Phoenix Digital光纤以太网网络冗余模块与传统光纤相兼容。通过使用Phoenix Digital模块&#xff0c;用户无需更换传统光纤和远程I/O设备。 升级工业网络是一项复杂的工作&#xff0c;用户需要耗费大量的时间、成本和其他资源来确保新建网络可以满足系统应用中的所有要…

Excel - 插入空白行

简单的插入一个空白行&#xff0c;只需选中一行&#xff0c;右键&#xff0c;选择插入一行即可。 如果要一次插入多个空行&#xff0c;可以按住Ctrl键&#xff0c;然后逐个选中想要插入的行&#xff0c;然后执行插入操作&#xff0c;如下所示&#xff1a; 选中张三、王五、田七…

二叉树的基本运算

二叉树的基本运算 上一讲我们已经讲了创建二叉树,所以这一讲,我们来说一下二叉树的基本运算方法,为以后二叉树的运用打下基础: (1)查找节点FindNode(*b,x): 在二叉树b中寻找data域值为x的节点,并返回指向该节点的指针 (2)找孩子节点LchildNode和Rchild-Node: 分别求二叉树中节…

逆傅里叶变IFFT原始信号恢复方法研究-附Matlab代码

一、原始信号模拟 现实中&#xff0c;由于得到的信号都是实数序列。设有实数序列x(n)&#xff0c;如下图所示 图1 原始信号 对应Matlab如下&#xff1a; %% 矩形波 N33; % 设置N长 xzeros(1,N); % 构成矩形波形 x(7:27)1; figur…

JavaSe-JAVA的多态

用一句话概括就是&#xff1a;事物在运行过程中存在不同的状态。先以教科书般举例说明,下文再举一个花木兰替父从军的例子帮助大家理解. 多态的存在有三个前提: 1.要有继承关系 2.子类要重写父类的方法 3.父类引用指向子类对, 但是其中又有很多细节需要注意。首先我们定义两…

java代码审计

java代码审计 SQL注入分析 1、JDBC 1、1&#xff08;statement&#xff09; public String jdbcVul(String id) {StringBuilder result new StringBuilder();try {Class.forName("com.mysql.cj.jdbc.Driver");Connection conn DriverManager.getConnection(db_u…

Qt OpenGL(二十六)——Qt OpenGL 核心模式-旋转的彩色三角形

Qt OpenGL(二十六)——Qt OpenGL 核心模式-旋转的彩色三角形 上篇文章我们把三角形上色成了,彩色的三角形: 离我们想要绘制的图形,旋转的三角形,又近了一步,本篇文章就让这个彩色的三角形旋转起来。不过从上篇开始使用的代码就是Qt封装的类了,不过也是核心模式的,步…

【Qt】从开源项目QCAD中学习如何增强QLineEdit控件

1 背景 Qt5 中有个很基本的单行输入框控件&#xff0c;就是 QLineEdit&#xff0c;类似于HTML中的input标签。 在QCAD开源项目中&#xff0c;其主界面中有个供用户输入绘图命令的单行输入框控件&#xff0c;其可以实现类似 Linux 终端的简单效果&#xff1a; 上键显示最近的…