程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

基於python實現的聊天室(客戶端:三)發送表情實現

編輯: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. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved