本文仅在于实现界面,不讨论各种消息协议,具体消息协议后期有空再行更新,谢谢。
# 名 称:聊天界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinter.messagebox/pickle/json # 制 作:Q343340657(WX同号)
登录界面,效果如下:
代码如下:
""" # 名 称:聊天登录界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinter.messagebox/pickle/json # 制 作:Q343340657(WX同号) """ import tkinter as tk import tkinter.messagebox import pickle import json # 窗口 login_win = tk.Tk() login_win.title("聊天登录窗口") sw = login_win.winfo_screenwidth() sh = login_win.winfo_screenheight() w = 690 h = 500 x = (sw - w) / 2 y = (sh - h) / 2 login_win.geometry("%dx%d+%d+%d" % (w, h, x, y)) login_win.resizable(0, 0) # 图片,自行编辑,图片大小:690x300 login_benner = tk.PhotoImage(file='login_benner.png') imgLabel = tk.Label(login_win, image=login_benner) imgLabel.place(x=0, y=0) # 标签 用户密码 tk.Label(login_win, text="用户名:").place(x=200, y=320) tk.Label(login_win, text="密 码:").place(x=200, y=360) # 文本框 用户名 var_usr_name = tk.StringVar() entry_usr_name = tk.Entry(login_win, textvariable=var_usr_name) entry_usr_name.place(x=260, y=320) # 文本框 密码 var_usr_pwd = tk.StringVar() entry_usr_pwd = tk.Entry(login_win, textvariable=var_usr_pwd, show="*") entry_usr_pwd.place(x=260, y=360) # 登录函数 def usr_login(): usr_name = var_usr_name.get() usr_pwd = var_usr_pwd.get() if usr_name == '111' and usr_pwd == '222': # 创建新的JSON new_usr = { 'usrname': "'" + usr_name + "'", 'age': '19' } with open('usr.json', 'w') as wp: json.dump(new_usr, wp) print(new_usr) login_win.destroy() import sx_friend_list #载入好友列表 elif usr_name == '' or usr_pwd == '': tk.messagebox.showerror(message="用户名密码不能为空") else: tk.messagebox.showerror(message="用户名密码错误!") # 登录 bt_login = tk.Button(login_win, text="登录(Login)", command=usr_login) bt_login.place(x=202, y=400) bt_quit = tk.Button(login_win, text="退出(Exit)") bt_quit.place(x=350, y=400) # 提示标签 tsLabel = tk.Label(login_win, text="聊天登录界面 for Python Tkinter", fg="red") tsLabel.pack(side=tk.BOTTOM, expand='yes', anchor='se') login_win.mainloop()
好友界面,效果如下:
代码如下:
#!/usr/bin/python # encoding=utf8 """ # 名 称:聊天好友界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinter.messagebox/pickle/json # 制 作:Q343340657(WX同号) """ import tkinter as tk from tkinter import ttk import pickle import json with open('usr.json', 'r') as fp: json_file = json.load(fp) json_str = json.dumps(json_file) json_date = json.loads(json_str) json_name = json_date['usrname'] print(json_name) fri_win = tk.Tk() fri_win.title("[" + json_name + "] - 聊天界面 for Linux Bate") # usrname = usr_name # 聊天界面大小 w = 320 h = 800 sw = fri_win.winfo_screenwidth() sh = fri_win.winfo_screenheight() x = 200 y = (sh - h) / 2 fri_win.geometry("%dx%d+%d+%d" % (w, h, x, y)) fri_win.resizable(0, 0) # 创建树形列表 fri_list = ttk.Treeview(fri_win, height=39, show="tree") fri_list.place(x=10, y=30) # 好友分组 # 1 fri_tree1 = fri_list.insert('', 0, 'frist', text='家人', values=("1")) fri_tree1_1 = fri_list.insert(fri_tree1, 0, '001', text='老婆', values=("2")) fri_tree1_2 = fri_list.insert(fri_tree1, 1, '002', text='女朋友001', values=("3")) fri_tree2 = fri_list.insert('', 1, 'second', text='同事', values=("4")) fri_tree2_1 = fri_list.insert(fri_tree2, 0, 'admin', text='女朋友002', values=("5")) fri_tree2_2 = fri_list.insert(fri_tree2, 1, 'testadmin', text='女朋友003', values=("6")) # 好友列表双击事件 def double_selected(event): for item in fri_list.selection(): item_text = fri_list.item(item, "text") chat_usr = { 'usrname': "'" + json_name + "'", 'age': '19', 'chatname': "'" + item_text + "'" } with open('usr.json', 'w') as wf: json.dump(chat_usr, wf) import sx_chat_win print(item_text) fri_list.bind('<Double-1>', double_selected) fri_list.pack(expand=True, fill=tk.X) # 好友按钮 fri_btn = tk.Button(text="好友") fri_btn.place(x=10, y=2) # 群按钮 cla_btn = tk.Button(text="群聊") cla_btn.place(x=70, y=2) # 添加好友 into_fri_btn = tk.Button(text="添加好友") into_fri_btn.place(x=130, y=2) # 搜索好友 l1 = tk.Label(text="查找好友:") l1.place(x=10, y=771) # 搜索框 e1 = tk.Entry(width=12) e1.place(x=80, y=770) # 搜索按钮 search_btn = tk.Button(text="搜索") search_btn.place(x=190, y=770) # 菜单 menu_btn = tk.Button(text="设置") menu_btn.place(x=256, y=770) fri_win.mainloop()
聊天界面,效果如下:
代码如下:
#!/usr/bin/python # encoding=utf8 """ # 名 称:聊天消息界面 # 环 境:python 3.8.5(其他版本没测试,请自行测试) # 模 块:tkinter/tkinter.messagebox/pickle/json # 制 作:Q343340657(WX同号) """ import tkinter as tk import time # 发送消息 def sendMsg(): t1_Msg.configure(state=tk.NORMAL) strMsg = "我:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + '\n' t1_Msg.insert("end", strMsg, 'green') sendMsg = t2_sendMsg.get('0.0', 'end') t1_Msg.insert("end", sendMsg) t2_sendMsg.delete('0.0', "end") t1_Msg.config(state=tk.DISABLED) print(strMsg + sendMsg) # 创建窗口 app = tk.Tk() app.title('与python聊天') # w = 800 h = 660 sw = app.winfo_screenwidth() sh = app.winfo_screenheight() x = 200 y = (sh - h) / 2 app.geometry("%dx%d+%d+%d" % (w, h, x, y)) app.resizable(0, 0) # 远程按钮 desktop_btn = tk.Button(text="远程协助") desktop_btn.place(x=700, y=2) # 聊天消息预览窗口 t1_Msg = tk.Text(width=113, height=32) t1_Msg.tag_config('green', foreground='#008C00') # 创建tag t1_Msg.place(x=2, y=35) # t1_Msg.config(state=tk.DISABLED) # t1_Msg.configure(state='disabled') # 聊天消息发送 t2_sendMsg = tk.Text(width=112, height=10) t2_sendMsg.place(x=2, y=485) # 表情按钮 face_btn = tk.Button(text="表情") face_btn.place(x=2, y=457) # 文件按钮 face_btn = tk.Button(text="文件传送") face_btn.place(x=62, y=457) # 截图按钮 prtscr_btn = tk.Button(text="截图") prtscr_btn.place(x=150, y=457) # 聊天记录查询 chat_search = tk.Button(text="查找") chat_search.place(x=210, y=457) # 语音按钮 chat_search = tk.Button(text="语音") chat_search.place(x=660, y=457) # 视频按钮 chat_search = tk.Button(text="视频") chat_search.place(x=720, y=457) # 发送按钮 sendMsg_btn = tk.Button(text="发送(Send)", command=sendMsg) sendMsg_btn.place(x=665, y=628) # 主事件循环 app.mainloop()
————————————————
版权声明:本文为CSDN博主「c343340657c」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/c343340657c/article/details/114541555