这是一个基于python的聊天室
实现表情发送
过程首先我想实现的是表情发送,那么就需要点击对吧,首先我们得知道点击的是什么控件,点击控件之后怎么获取到表情符号,在加到输入框上。
首先给大家看个图,就是这个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)
总结
如有建议,还请多多指教
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)