首页 > 编程语言 >Python小项目:利用tkinter与图灵机器人制作智能聊天系统

Python小项目:利用tkinter与图灵机器人制作智能聊天系统

时间:2023-08-15 18:08:23浏览次数:65  
标签:tkinter Python text self 图灵 msglist grid frame left



文章目录

  • 1 前言
  • 2 代码分模块讲解
  • 2.1 导入相应的库
  • 2.2 创建机器人对象
  • 2.3 创建信息交互过程对象
  • 2.4 页面创建对象
  • 3 整体代码
  • 4 结语



Python小项目:利用tkinter与图灵机器人制作智能聊天系统_前端

1 前言

在本项目中,我们将探索如何使用Python的tkinter库以及图灵机器人API来构建一个智能聊天系统。本项目的初衷是通过实际操作,结合GUI编程和API调用,展示如何创建一个有趣且实用的小应用。我们将借助tkinter创建一个类似QQ聊天框的界面,并使用图灵机器人的API来实现自动化的智能聊天功能。

具体效果如下(ps:由于在网站的免费额度用完了,这里返回的是“请求次数超限制”):

Python小项目:利用tkinter与图灵机器人制作智能聊天系统_机器人_02

图灵机器人网站链接:图灵机器人网站

Python小项目:利用tkinter与图灵机器人制作智能聊天系统_json_03


首先需要注册登录,然后点击下图中的“创建机器人”,根据自己的需要创建~

Python小项目:利用tkinter与图灵机器人制作智能聊天系统_机器人_04


创建完成后,会出现创建数据,其中有apikey!

2 代码分模块讲解

2.1 导入相应的库

首先需要导入相应的库,涉及到tkinter、datetime、time、requests、json等~

from tkinter import *
import datetime
import time
import requests,json
from tkinter import scrolledtext

2.2 创建机器人对象

机器人对象实际上是通过request请求访问图灵机器人API!

def computer(self, inquant):
        userid = 99        #检查一下自己的userid
        apikey = ''        #这里输入自己的apikey
        startup = ''
        while True:
            question = inquant
            tulingdata1 = json.dumps({
                "perception": {
                    "inputText": {
                        "text": question  # 将你输入的对话封装成一个字典,再转换成字符串,传给图灵机器人语义系统
                    },
                },
                "userInfo": {
                    "apiKey": apikey,  # 与图灵语义系统联系
                    "userId": userid
                }
            })
            robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1)  # 因为是人机对话,所以通过post传递信息
            jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']  # 返回图灵机器人的对话
            return jsrobot1+'\n'

2.3 创建信息交互过程对象

这里实际上是将发送信息与接收信息的过程进行封装,方便之后的调用。同时使用了时间库,使聊天更加的真实!

def sendmessage(self, text_msglist, text_msg):
        msgcontent = '我:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n '
        text_msglist.insert(END, msgcontent, 'green')
        text_msglist.insert(END, text_msg.get('0.0', END))
        computertent = '图灵机器人:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n '
        text_msglist.insert(END, computertent, 'green')
        computer_talk = text_msg.get('0.0', END)
        text_msglist.insert(END, (self.computer(computer_talk)))
        text_msg.delete('0.0', END)

2.4 页面创建对象

通过grid来布局tkinter组件使页面更加的美观

def createPage(self):
        self.frame_left_top = Frame(width=600, height=220, bg='white')
        self.frame_left_center = Frame(width=600, height=100, bg='white')
        self.frame_left_bottom = Frame(width=600, height=20)
        ##创建需要的几个元素
        text_msglist = scrolledtext.ScrolledText(self.frame_left_top)
        text_msg = Text(self.frame_left_center)
        button_sendmsg = Button(self.frame_left_bottom, text='发送', command=lambda: self.sendmessage(text_msglist, text_msg))
        # 创建一个绿色的tag
        text_msglist.tag_config('green', foreground='#008B00')
        # 使用grid设置各个容器位置
        self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
        self.frame_left_center.grid(row=1, pady=5)
        self.frame_left_bottom.grid(row=2, column=0)
        self.frame_left_top.grid_propagate(0)
        self.frame_left_center.grid_propagate(0)
        self.frame_left_bottom.grid_propagate(0)
        # 把元素填充进frame
        text_msglist.grid()
        text_msg.grid()
        button_sendmsg.grid(row=0, column=0, sticky=E)

3 整体代码

ps:在computer函数中,将apikey 换的换成自己的!

from tkinter import *
import datetime
import time
import requests,json
from tkinter import scrolledtext

class talk(object):
    def __init__(self, master=None):
        self.root = master  # 定义内部变量root
        self.createPage()

    def computer(self, inquant):
        userid = 99
        apikey = ''   #换成自己的apikey
        startup = ''
        while True:
            question = inquant
            tulingdata1 = json.dumps({
                "perception": {
                    "inputText": {
                        "text": question  # 将你输入的对话封装成一个字典,再转换成字符串,传给图灵机器人语义系统
                    },
                },
                "userInfo": {
                    "apiKey": apikey,  # 与图灵语义系统联系
                    "userId": userid
                }
            })
            robot1 = requests.post('http://openapi.tuling123.com/openapi/api/v2', tulingdata1)  # 因为是人机对话,所以通过post传递信息
            jsrobot1 = json.loads(robot1.text)['results'][0]['values']['text']  # 返回图灵机器人的对话
            return jsrobot1+'\n'

    def sendmessage(self, text_msglist, text_msg):
        msgcontent = '我:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n '
        text_msglist.insert(END, msgcontent, 'green')
        text_msglist.insert(END, text_msg.get('0.0', END))
        computertent = '图灵机器人:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n '
        text_msglist.insert(END, computertent, 'green')
        computer_talk = text_msg.get('0.0', END)
        text_msglist.insert(END, (self.computer(computer_talk)))
        text_msg.delete('0.0', END)

    def createPage(self):
        self.frame_left_top = Frame(width=600, height=220, bg='white')
        self.frame_left_center = Frame(width=600, height=100, bg='white')
        self.frame_left_bottom = Frame(width=600, height=20)
        ##创建需要的几个元素
        text_msglist = scrolledtext.ScrolledText(self.frame_left_top)
        text_msg = Text(self.frame_left_center)
        button_sendmsg = Button(self.frame_left_bottom, text='发送', command=lambda: self.sendmessage(text_msglist, text_msg))
        # 创建一个绿色的tag
        text_msglist.tag_config('green', foreground='#008B00')
        # 使用grid设置各个容器位置
        self.frame_left_top.grid(row=0, column=0, padx=2, pady=5)
        self.frame_left_center.grid(row=1, pady=5)
        self.frame_left_bottom.grid(row=2, column=0)
        self.frame_left_top.grid_propagate(0)
        self.frame_left_center.grid_propagate(0)
        self.frame_left_bottom.grid_propagate(0)
        # 把元素填充进frame
        text_msglist.grid()
        text_msg.grid()
        button_sendmsg.grid(row=0, column=0, sticky=E)
        
        

if __name__ == "__main__":
    root = Tk()
    root.title('图灵机器人聊天')
    talk(root)
    root.mainloop()

最后再次展示一下界面图:

Python小项目:利用tkinter与图灵机器人制作智能聊天系统_对话_05

4 结语

在本次项目中,我们成功地利用Python的tkinter库与图灵机器人API打造了一个智能聊天系统。通过实际操作,我们学习了如何创建一个简洁美观的聊天界面,实现与机器人的智能互动。这个小项目不仅让我们掌握了GUI编程和API调用的技巧,还为我们提供了一个实际的应用场景,展示了如何将编程知识用于解决实际问题。通过进一步优化和拓展,我们可以将这个聊天系统变得更加强大和多样化,为用户带来更好的体验。在学习的过程中,我们也能够更深入地理解图灵机器人的工作原理和使用方法。无论是作为学习实践还是为了开发有趣的小工具,这个项目都是一个很好的起点,希望你能够通过这个项目获得更多的编程经验和乐趣!

Python小项目:利用tkinter与图灵机器人制作智能聊天系统_json_06


标签:tkinter,Python,text,self,图灵,msglist,grid,frame,left
From: https://blog.51cto.com/u_15229916/7091652

相关文章

  • Python小项目:利用tkinter搭建粗糙集简约算法软件
    文章目录1前言2粗糙集简约算法简述2.1基本概念2.2算法原理2.3应用领域3实验详解3.1实验数据3.2实验说明及过程截图3.3实验结果4代码详解5结语完整项目下载:下载链接1前言在本次旅程中,我们将探索一个令人兴奋的主题——“Python小项目:利用tkinter搭建粗糙集简约算法软件......
  • Python小项目:利用 U-net 完成细胞图像分割
    文章目录1前言2实验概述3U-net概述4实验过程及代码5结语完整数据集下载:下载链接1前言在当今数字化时代,图像处理和分析已经成为了科学研究和技术应用领域的关键部分。在生物医学领域,图像分析对于诊断、治疗和疾病研究具有重要意义。本项目将带您深入了解U-net细胞分割技......
  • Python小项目:利用tkinter搭建个人所得税计算器
    文章目录1前言2详细介绍3代码介绍4结语完整项目下载:下载链接1前言在当今数字化时代,个人所得税的计算对于每个人来说都是一个重要而复杂的任务。为了让个人所得税的计算变得更加便捷和直观,本实验采用了Python编程语言,并借助tkinter图形化界面库,搭建了一个实用的个人所得......
  • Python小项目:利用tkinter开发测手速小游戏
    文章目录1简介2代码分模块介绍2.1导入需要的包2.2定义全局变量2.3定义页面组件类2.4定义增加类2.5定义结束类3整体代码展示4结语1简介利用tkinter开发测手速的小游戏,大家10s内可以点击鼠标多少次呢?想测试一下吗?来试试测手速下游戏吧!仅供娱乐!试玩视频:测手速小游戏游......
  • Python小项目:利用tkinter开发AI对战井字棋游戏
    文章目录1前言2代码分模块介绍2.1导入需要的库2.2定义全局变量2.2定义玩家类2.3定义页面类2.4定义页面变化类以及玩家与AI轮流转换下子权限2.5定义判断胜负类2.6定义智能AI下子类3整体代码4结语完整项目下载:下载链接1前言在数字的世界里,古老的棋盘游戏焕发出崭新的活......
  • Python小项目:通过商品条形码查询商品信息
    文章目录1商品条形码2查询商品条形码的目的3实现步骤及代码3.1爬取网站介绍3.2python代码实现3.2.1日志模块3.2.2查询模块3.2.3运行结果4结语完整项目下载:下载链接1商品条形码平日大家会购买许许多多的商品,无论是饮料、食品、药品、日用品等在商品的包装上都会有条形码......
  • 【Python&RS】基于GDAL遥感影像分幅裁剪
    ​    随着科技的进步,遥感影像包含的信息越来越多,存储空间也变得很大,这就导致我们在处理影像时软件会非常的卡。同时目前很火的深度学习也需要对影像分割后制作样本集,所以今天给大家分享下如何使用Python的GDAL库对遥感影像进行分幅裁剪!一、导入需要的三方库   ......
  • python中 函数中的self是什么?
      self可视为类的实例,在使用类创建实例时,我们可能需要强制传入一些参数。所以一般在构造函数_init_里给实例的属性赋值。classStudent(obiect):def__init__(self,name,score):self.name=nameself.score=scoredefprint_score(self):......
  • python语言-----------------身份证信息提前验证
    ##截取身份证信息,判断身份证上面的具体信息:上代码:importredefextract_id_card_info(id_card):#匹配身份证号码并提取出生日期和顺序号match=re.match(r'(\d{6})(\d{4})(\d{2})(\d{2})\d{2}(\d{1})(\d|X)',id_card)ifmatchisNone:returnNonearea......
  • ​python爬虫——爬取天气预报信息
    在本文中,我们将学习如何使用代理IP爬取天气预报信息。我们将使用Python编写程序,并使用requests和BeautifulSoup库来获取和解析HTML。此外,我们还将使用代理服务器来隐藏我们的IP地址,以避免被目标网站封禁。1.安装必须的库首先,我们需要安装必须的库,包括requests、beauti......