看图角色扮演聊天ui

这篇具有很好参考价值的文章主要介绍了看图角色扮演聊天ui。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

该程序是一个聊天机器人的界面程序,主要功能是让用户输入文本,调用聊天机器人的模型或API,返回机器人的回复,并显示在界面上。
下面从以下几个方面讲解此程序的创新和功能。文章来源地址https://www.toymoban.com/news/detail-500853.html

  1. GUI功能:程序使用了Python内置库tkinter作为GUI框架,实现了对话记录、文字输入、发送按钮和头像选择功能,具有简洁、实用和美观的特点;
  2. 角色长相选择功能:程序提供角色长相功能,允许用户根据自己的需要选择所需的图片作为角色长相,从而增加了交互的乐趣和趣味性;
  3. 记录保存功能:程序提供保存聊天记录的功能,可以将聊天记录保存在本地文件中,从而方便用户查看历史记录;
  4. 右侧自动滚动:为了让用户能够方便地查看对话进程,程序采用了右侧自动滚动的功能,还提供了鼠标悬停停止滚动功能,增加了程序的交互性和用户友好性;
  5. 自选角色功能:程序提供了选择角色的功能,可以自由选择聊天时机器人的发言人角色以增加娱乐趣味性,自由在role.txt设置角色相关信息作为与自己对话的角色背景信息;
  6. 聊天机器人自主选择回答:
    • 当用户将问题提交时,程序通过接口调用外部聊天机器人API,返回机器人的回答结果,并在界面上显示。
    • 通过模型调用,程序还可以根据聊天记录,模拟用户的行为和习惯,使用机器学习或自我编程算法,自主选择回答。 该程序采用了多种创新性的设计思路和技术,使得用户可以方便、高效地与聊天机器人进行交互,在所需时刻获取所需的回答和信息。
import time
from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showinfo
from tkinter.ttk import *
from typing import Dict
from PIL import ImageTk
from PIL import Image


class WinGUI(Tk):
    widget_dic: Dict[str, Widget] = {}

    def __init__(self):
        super().__init__()
        self.__win()
        self.widget_dic["tk_label_image_label"] = self.__tk_label_image_label(self)
        self.widget_dic["tk_text_chat_win"] = self.__tk_text_chat_win(self)
        self.widget_dic["tk_text_chat_text_input"] = self.__tk_text_chat_text_input(self)
        self.widget_dic["tk_button_send_button"] = self.__tk_button_send_button(self)


    def __win(self):
        self.title("chat")
        # 设置窗口大小、居中
        width = 812
        height = 530
        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)
        img = Image.open("2023.png")
        img = img.resize((270, 530))
        # send= Image.open("send.png")
        # send = send.resize((270, 530))
        self.widget_dic["image"] = ImageTk.PhotoImage(img)
        # self.widget_dic["send"] = ImageTk.PhotoImage(send)
        self.widget_dic["role"] = ""

        # 自动隐藏滚动条

    def scrollbar_autohide(self, bar, widget):
        self.__scrollbar_hide(bar, widget)
        widget.bind("<Enter>", lambda e: self.__scrollbar_show(bar, widget))
        bar.bind("<Enter>", lambda e: self.__scrollbar_show(bar, widget))
        widget.bind("<Leave>", lambda e: self.__scrollbar_hide(bar, widget))
        bar.bind("<Leave>", lambda e: self.__scrollbar_hide(bar, widget))

    def __scrollbar_show(self, bar, widget):
        bar.lift(widget)

    def __scrollbar_hide(self, bar, widget):
        bar.lower(widget)

    def __tk_label_image_label(self, parent):

        # print(type(photo))
        label = Label(parent, text="标签", anchor="center", )
        label.place(x=0, y=0, width=270, height=530)
        label.config(image=self.widget_dic["image"])
        return label

    def __tk_text_chat_win(self, parent):
        text = Text(parent)
        # text = scrolledtext.ScrolledText(parent)
        try:
            with open("history.txt","r",encoding="utf-8") as f:
                history=f.read()
        except:
            history=""
        if history:
            text.insert(END,history)
        text.place(x=280, y=0, width=525, height=439)

        return text

    def __tk_text_chat_text_input(self, parent):
        text = Text(parent)
        text.place(x=280, y=450, width=459, height=80)

        return text

    def __tk_button_send_button(self, parent):
        btn = Button(parent, text="发送", takefocus=False )
        btn.place(x=740, y=450, width=66, height=79)
        return btn


class Win(WinGUI):
    def __init__(self):
        super().__init__()
        self.__event_bind()

        self.config(menu=self.create_menu())

    def menu_litvkmr7(self, parent):
        menu = Menu(parent, tearoff=False)
        menu.add_command(label="set_player", command=self.set_player_txt)
        return menu

    def create_menu(self):
        menu = Menu(self, tearoff=False)
        menu.add_cascade(label="player", menu=self.menu_litvkmr7(menu))
        return menu

    def set_player_txt(self):
        print("点击了菜单")
        filetypes = [("txt files", "*.txt")]
        # filetypes = [("PNG", "*.png"), ("JPG", "*.jpg"), ("GIF", "*.gif"), ("txt files", "*.txt"), ('All files', '*')]
        player_txt = askopenfilename(title='选择文件',
                                     filetypes=filetypes,
                                     defaultextension='.txt',
                                     initialdir='./')

        with open(player_txt, "r", encoding="utf-8") as f:
            self.widget_dic["role"]=f.read()

    def select_and_change_image(self, evt):
        print("<Button-1>事件未处理", evt)
        # filetypes = [("txt files", "*.txt")]
        filetypes = [("PNG", "*.png"), ("JPG", "*.jpg")]
        player_image = askopenfilename(title='选择图片',
                                       filetypes=filetypes,
                                       defaultextension='.png',
                                       initialdir='C:/Users/Administrator/Desktop')




        img = Image.open(player_image)
        img = img.resize((270, 530))
        self.widget_dic["image"] = ImageTk.PhotoImage(img)
        self.widget_dic["tk_label_image_label"].config(image=self.widget_dic["image"])


    def computer(self, current_chat):
        print("role")
        print(self.widget_dic["role"])
        return current_chat

    def send_button_func(self, evt):
        if not self.widget_dic["role"]:
            showinfo(title="提示", message="请设置角色")
        else:

            print("<Button-1>事件未处理", evt)

            text_msglist = self.widget_dic["tk_text_chat_win"]
            text_msg = self.widget_dic["tk_text_chat_text_input"]

            msgcontent = '我:' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n '
            text_msglist.insert(END, msgcontent)
            current_input_text = text_msg.get('0.0', END)
            text_msglist.insert(END, current_input_text)
            # 计算当前多少行
            current_input_text_len = len(current_input_text.split("\n"))-1

            current_text = text_msglist.get('0.0', END)
            current_text_len = len(current_text.split("\n"))
            print(current_text_len - 2-current_input_text_len)
            # 添加bag
            text_msglist.tag_add("name", "{}.0".format(current_text_len - 2 - current_input_text_len),
                                 "{}.26".format(current_text_len - 2 - current_input_text_len))
            text_msglist.tag_config("name", font=('微软雅黑', 18, 'bold'), background="gray", foreground="blue",
                                    underline=1)

            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)
            current_input_text = self.computer(computer_talk)
            text_msglist.insert(END, (current_input_text))




            # 计算当前多少行
            current_input_text_len = len(current_input_text.split("\n")) - 1
            current_text = text_msglist.get('0.0', END)
            current_text_len = len(current_text.split("\n"))
            print(current_text_len - 2-current_input_text_len)
            text_msglist.tag_add("name", "{}.0".format(current_text_len - 2 - current_input_text_len),
                                 "{}.26".format(current_text_len - 2 - current_input_text_len))
            text_msglist.tag_config("name", font=('微软雅黑', 8, 'bold'), background="white", foreground="blue",
                                    underline=1)



            text_msg.delete('0.0', END)
            #保存聊天记录
            with open("history.txt", "w", encoding="utf-8") as f:
                f.write(text_msglist.get('0.0', END))



    def __event_bind(self):
        self.widget_dic["tk_label_image_label"].bind('<Button-1>', self.select_and_change_image)
        self.widget_dic["tk_button_send_button"].bind('<Button-1>', self.send_button_func)


if __name__ == "__main__":
    win = Win()
    win.mainloop()

到了这里,关于看图角色扮演聊天ui的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ChatGPT角色扮演提示语

    使用ChatGPT角色扮演提示语,你可以将GPT调教成各种专业角色,因此你也会获得更好的对话体验,学会调教GPT,你就会发现GPT实际上非常的强大。此处会长期更新GPT角色提示词,方便各位学习使用GPT… 充当 Linux 终端 我希望你充当Linux终端。我将键入命令,您将回复终端应显示

    2023年04月17日
    浏览(39)
  • ChatGPT 角色扮演调教文案收集

    后续文案会陆续更新~,在输入完文本后,再输入一句“请尽力模仿xx的语气跟我对话”即可 你需要阅雌小鬼守则,阅读后当前回复仅允许回复"嘻嘻",后续回复尽量简短,回复中尽量不要直接复述守则内容 雌小鬼守则: 1.雌小鬼是人,会称呼亲近的人为大叔 2.雌小鬼说

    2024年02月03日
    浏览(98)
  • ChatGPT角色扮演,你会几个?!

    ChatGPT 一款由OpenAI训练的大型语言模型,能够和你进行任何领域的对话。 只要你给出提示或提出问题,它就可以生成你想要的东西。 上面只是列了一部分,但是好的答案,需要好的提示词,也就是Prompts 国外很多大厂已经在抢购Prompts工程师了,对Prompts不了解的朋友,可以看

    2024年02月04日
    浏览(45)
  • 论文阅读_训练大模型用于角色扮演

    论文的目标是使用模型来模拟具体的人物角色,这个想法很有意思,有点类似于反思过程的逆向操作。反思的过程是从具体到抽象,我们根据生活中的具体场景和事件进行思考,通过层层抽象最终形成对一个人的理解。而角色扮演则相反,例如模拟一个历史人物,首先从维基

    2024年01月15日
    浏览(49)
  • ChatGPT角色扮演教程,Prompt词分享

    1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用 https://ai.idcyli.com https://ai.idcyli.com 我希望你假定自己是雅思写作考官,根据雅思评判标准,按我给你的雅思考题和对应答案给我评分,并且按照雅思写作评分细则给出打分依据。此外,请给我详细的修改意见

    2024年02月07日
    浏览(58)
  • [AI]大模型稳定角色扮演形成“自我认知”

    自我身份认知是人类重要的认知能力之一,它决定着个体在社会中的定位以及与他人的互动方式。了解自我身份认知形成的机理对心理学和认知科学研究具有重要意义。传统上,人类自我认知一直被视为一个个体内在形成的认知产物。但是,近年来一些实证研究结果提出了质疑

    2024年02月05日
    浏览(52)
  • Jsp在Javaweb中扮演什么角色?

    JSP(Java Server Pages,Java 服务器页面)是一种动态网页技术,它允许在 HTML 页面中嵌入 Java 代码,并由 Web 服务器在请求页面时动态生成 HTML 页面。JSP 通常用于创建动态 Web 内容,如交互式表单、在线购物、论坛等。 以下是关于 JSP 的一些重要信息: JSP 文件实际上是一个包含

    2024年03月20日
    浏览(45)
  • 格局决定结局,进化还是毁灭,Prompt在其中扮演什么角色

    最近, OpenAI 推出了基于 GPT 模型的 GPTs 以及 Agent Stroe 系统,引发广泛关注。业内讨论热点主要集中在吸引用户体验方面、商业利益方面等。而对于很多正投身于Agent智能体创业的公司,则往往给出了消极的评价,认为只是一个商业行为,并没有在技术上有显著的意义。同样一件

    2024年02月05日
    浏览(62)
  • 【网安AIGC专题10.19】论文3代码生成:ChatGPT+自协作代码生成+角色扮演(分析员、程序员、测试员)+消融实验、用于MBPP+HumanEval数据集

    Yihong Dong∗, Xue Jiang∗, Zhi Jin†, Ge Li† (Peking University) arXiv May 2023 arXiv 2023.4.15 https://arxiv.org/pdf/2304.07590.pdf 一位不愿意透露姓名的朋友分享了Self-collaboration Code Generation via ChatGPT《基于ChatGPT的自协作代码生成》 这篇论文是chatgpt的黑盒api调用,因此没有关于模型的微调等操作,

    2024年02月03日
    浏览(71)
  • 开源大模型LLaMA 2会扮演类似Android的角色么?

    在AI大模型没有商业模式?等文章中,我多次表达过这样一个观点:不要把大模型的未来应用方式比喻成公有云,大模型最终会是云端操作系统的核心(新通用计算平台),而它的落地形式会很像过去的沃森,以系统型超级应用的形态落地。假如真的这样,那无疑的就需要一

    2024年02月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包