基于python实现的聊天室(客户端:三)发送表情实现

前言

想看看聊天室代码的话,可以到https://github.com/cgynb/a-flask-project/tree/guiChatroom看看。或者直接访问这个地址

http://81.70.180.118:12347/聊天呀.exe

是打包好的程序,服务端有在服务器上跑着了,可以直接使用的,但是低版本的windows运行可能会有点问题
请添加图片描述

需求

实现表情发送

过程

首先我想实现的是表情发送,那么就需要点击对吧,首先我们得知道点击的是什么控件,点击控件之后怎么获取到表情符号,在加到输入框上。

选择控件

首先给大家看个图,就是这个ttkbootstrap.DateEntry控件,下面的日期的选中是不是非常符合我们对于表情排列的需求呢,所以,我开始看他的源代码。
在这里插入图片描述
我为了偷懒甚至是直接copy了他的整个类来跑,最后发现在 def _on_date_ask(self):这个方法里,使用了一个静态方法

new_date = Querybox.get_date(
            parent=self.entry,
            startdate=old_date,
            firstweekday=self._firstweekday,
            bootstyle=self._bootstyle,
        )

对,就是这东西创造了选择日期的窗口,那么,我们继续深入看看他是怎么做的

chooser = DatePickerDialog(
            parent=parent,
            title=title,
            firstweekday=firstweekday,
            startdate=startdate,
            bootstyle=bootstyle,
        )
return chooser.date_selected

在静态方法get_date这里,会发现他实例化了DatePickerDialog这个类,所以并且会返回这个实例的一个属性,而且属性叫date_selected,所以我们再点开查看这个DatePickerDialog类
于是功夫不负有心人,我们能找到这个画日历的方法,仔细一看,他是在最底下可以很明显看到btn = Radiobutton,所以我们终于明白那个可以选中日期的东西,就是Radiobutton,并且,我们看到,里面有一个variable参数是self.datevar,在初始化函数中又有self.datevar = ttk.IntVar(),所以我们可以知道只需要一个变量即可获取所有这些Radiobutton的值,所以我们就开始动手吧

    def _draw_calendar(self):
        self._update_widget_bootstyle()
        self._set_title()
        self._current_month_days()
        self.frm_dates = ttk.Frame(self.frm_calendar)
        self.frm_dates.pack(fill=BOTH, expand=YES)

        for row, weekday_list in enumerate(self.monthdays):
            for col, day in enumerate(weekday_list):
                self.frm_dates.columnconfigure(col, weight=1)
                if day == 0:
                    ttk.Label(
                        master=self.frm_dates,
                        text=self.monthdates[row][col].day,
                        anchor=CENTER,
                        padding=5,
                        bootstyle=SECONDARY,
                    ).grid(row=row, column=col, sticky=NSEW)
                else:
                    if all(
                        [
                            day == self.date_selected.day,
                            self.date.month == self.date_selected.month,
                            self.date.year == self.date_selected.year,
                        ]
                    ):
                        day_style = "secondary-toolbutton"
                    else:
                        day_style = f"{self.bootstyle}-calendar"

                    def selected(x=row, y=col):
                        self._on_date_selected(x, y)

                    btn = ttk.Radiobutton(
                        master=self.frm_dates,
                        variable=self.datevar,
                        value=day,
                        text=day,
                        bootstyle=day_style,
                        padding=5,
                        command=selected,
                    )
                    btn.grid(row=row, column=col, sticky=NSEW)

制作表情区域

emoji_list = ['🐻', '🗿', '🙃', '😊', '🥲',
              '🥰', '🤬', '🥶', '🥵', '😳',
              '🤮', '🤩', '🤓', '😝', '🌚',
              '🙈', '🤪', '🏩', '🚸','🤺',
              '🚾', '🉑', '🉐', '㊙', '🈶',
              '🈚', '🆘', '🆗', '🪙', '🤟',
              '👊', '😭', '🙏', '🙌', '🦓',
              '🦜', '🦄', '🎃', '✔', '™']
    def show_emoji_list(self):
        row = 1
        col = 1
        for e in emoji_list:
            btn = Radiobutton(self.frame, bootstyle='dark-outline-toolbutton', variable=self.emoji_var, value=e,
                              text=e, command=lambda: self.add_emoji(self.emoji_var.get()))
            btn.grid(row=row, column=col, sticky='nsew')
            col += 1
            if col == 6:
                row += 1
                col = 1

    def add_emoji(self, emoji):
        self.e.insert('end', emoji)

总结

如有建议,还请多多指教

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gsxdcyy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值