想看看聊天室代碼的話,可以到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)
如有建議,還請多多指教