我想制作一个聊天室,但在发送表情宝这里遇到了困难。
import socket
from tkinter import *
import tkinter.messagebox
import threading
import json
import tkinter.filedialog
from tkinter.scrolledtext import ScrolledText
from time import strftime
from time import *
IP = ''
PORT = ''
user = ''
listbox1 = '' # 用于显示在线用户的列表框
show = 1 # 用于判断是开还是关闭列表框
users = [] # 在线用户列表
chat = '------Group chat-------' # 聊天对象
# 登陆窗口
root0 = tkinter.Tk()
root0.geometry("300x150")
root0.title('用户登陆窗口')
root0.resizable(0, 0)
one = tkinter.Label(root0, width=300, height=150, bg="#D0EEFF")
one.pack()
IP0 = tkinter.StringVar()
IP0.set('')
USER = tkinter.StringVar()
USER.set('')
labelIP = tkinter.Label(root0, text='IP地址', bg="#D0EEFF")
labelIP.place(x=20, y=20, width=100, height=40)
entryIP = tkinter.Entry(root0, width=60, textvariable=IP0)
entryIP.place(x=120, y=25, width=100, height=30)
labelUSER = tkinter.Label(root0, text='用户名', bg="#D0EEFF")
labelUSER.place(x=20, y=70, width=100, height=40)
entryUSER = tkinter.Entry(root0, width=60, textvariable=USER)
entryUSER.place(x=120, y=75, width=100, height=30)
def Login(*args):
global IP, PORT, user
IP, PORT = entryIP.get().split(':')
user = entryUSER.get()
if not user:
tkinter.messagebox.showwarning('warning', message='用户名为空!')
else:
root0.destroy()
loginButton = tkinter.Button(root0, text="登录", command=Login, bg="#50BEFF")
loginButton.place(x=135, y=110, width=40, height=25)
root0.bind('<Return>', Login)
root0.mainloop()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((IP, int(PORT)))
if user:
s.send(user.encode()) # 发送用户名
else:
s.send('用户名不存在'.encode())
user = IP + ':' + PORT
root1 = tkinter.Tk()
oo = tkinter.PhotoImage(file="C://Users//abc//Desktop//yyy.png")
root1.geometry("960x480")
root1.title('芊芊聊')
root1.resizable(0, 0)
scr = Scrollbar(root1)
ida = tkinter.Label(root1, image=oo)
ida.image = oo
ida.place(x=635, y=0)
photo = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//yyy.png")
listbox = ScrolledText(root1)
listbox.place(x=5, y=0, width=640, height=320)
listbox.tag_config('tag1', foreground='#009FFF', background="#BBECFF")
listbox.config(yscrollcommand=scr.set)
scr.config(command=listbox.yview)
listbox.insert(tkinter.END, '欢迎进入群聊,大家开始聊天吧!(如要私聊,请在发送的消息的后缀~后加上用户\n名)', 'tag1')
p1 = tkinter.PhotoImage(file="微信表情1.jpg")
p2 = tkinter.PhotoImage(file="微信表情2.jpg")
p3 = tkinter.PhotoImage(file="微信表情3.jpg")
p4 = tkinter.PhotoImage(file="微信表情4.jpg")
p5 = tkinter.PhotoImage(file="微信表情5.jpg")
p6 = tkinter.PhotoImage(file="微信表情6.jpg")
p7 = tkinter.PhotoImage(file="微信表情7.jpg")
p8 = tkinter.PhotoImage(file="微信表情8.jpg")
p9 = tkinter.PhotoImage(file="微信表情9.jpg")
p10 = tkinter.PhotoImage(file="微信表情10.jpg")
p11 = tkinter.PhotoImage(file="微信表情11.jpg")
p12 = tkinter.PhotoImage(file="微信表情12.jpg")
p13 = tkinter.PhotoImage(file='微信表情13.jpg')
p14 = tkinter.PhotoImage(file='微信表情14.png')
p15 = tkinter.PhotoImage(file='微信表情15.png')
button = tkinter.Button(root1, image=p15)
button.place(x=5, y=300)
dis = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//fddre.jpg")
mode = 'hour'
ee = 0
er = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//367542504897592196.png")
lbl = tkinter.Toplevel(root1)
lbl.title('时钟')
def showtime():
if mode == 'hour':
string = strftime("%H:%M:%S %p")
else:
string = strftime("%Y-%m-%d")
lb = Label(lbl, width=100, image=er)
lb.config(text=string)
lb.after(1000, showtime)
bb = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//按钮//时钟.png")
bbb = tkinter.Button(image=bb, command=lambda: showtime())
bbb.place(x=430, y=300)
INPUT = tkinter.StringVar()
INPUT.set('')
entryIuput = tkinter.Entry(root1, bg='#D0EEFF', width=120, textvariable=INPUT)
entryIuput.place(x=5, y=320, width=580, height=170)
listbox1 = tkinter.Listbox(root1)
listbox1.place(x=510, y=0, width=130, height=320)
# tk.mainloop()
def send(*args):
message = entryIuput.get() + '~~' + user + '~' + chat
s.send(message.encode())
INPUT.set('')
# import tkinter as tk
# print(tk.CURRENT)
phott = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//按钮//help提示.png")
def helpmessage():
hhh = tkinter.Toplevel(root1)
hhh.title = ('帮助')
canvv = tkinter.Label(hhh, width=400, height=573, bg='white', image=phott)
canvv.pack()
photo1 = tkinter.PhotoImage("C://Users//abc//Desktop//Liaotian//按钮//按钮.png")
sendButton = tkinter.Button(root1, text="\n发\n\n\n送", anchor='n', command=send, font=('Helvetica', 18),
compound='center')
sendButton.image = photo1
sendButton.place(x=585, y=300, width=55, height=300)
root1.bind('<Return>', send)
ppp = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//按钮//help按钮.png")
help = tkinter.Button(root1, image=ppp, command=helpmessage)
help.place(x=460, y=295)
img = tkinter.PhotoImage(file="C://Users//abc//Desktop//Liaotian//按钮//装饰小按钮.gif")
img1 = tkinter.Button(root1, image=img)
img1.place(x=490, y=300)
def receive():
global uses
while True:
data = s.recv(1024)
data = data.decode()
print(data)
try:
uses = json.loads(data)
listbox1.delete(0, tkinter.END)
listbox1.insert(tkinter.END, "当前在线用户")
listbox1.insert(tkinter.END, "------Group chat-------")
for x in range(len(uses)):
listbox1.insert(tkinter.END, uses[x])
users.append('------Group chat-------')
except:
data = data.split('~')
message = data[0]
userName = data[1]
chatwith = data[2]
message = '\n' + message
if chatwith == '------Group chat-------': # 群聊
if userName == user:
listbox.insert(tkinter.END, message)
else:
listbox.insert(tkinter.END, message)
elif userName == user or chatwith == user:
if userName == user:
listbox.tag_config('tag2', foreground='red')
listbox.insert(tkinter.END, message, 'tag2')
else:
listbox.tag_config('tag3', foreground='green')
listbox.insert(tkinter.END, message, 'tag3')
listbox.see(tkinter.END)
r = threading.Thread(target=receive)
r.start()
root1.mainloop()
s.close()
我不知道该如何实现在发送时显示一个表情,虽然网上有很多相关的帖子,但是大部分时部分代码或者思路,看不懂
我尝试了网上的很多方法,但与我的聊天室都不能融合到一起。
我想要达到的效果是在点击表情按钮时会出现一个新窗口。新窗口中有一些表情包按钮,点击就会发送表情包。