IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 无聊做了个python联机聊天室 -> 正文阅读

[Python知识库]无聊做了个python联机聊天室

????????我在网上迅速学习了联机(只限于同一个网络),然后自己操作,用tkinter创作用户界面,搞了一个联机聊天室。

?

?两台电脑之间真的可以联机聊天(亲测成功)

还可以对字体、背景等进行设置!

客户端代码

import _thread
import socket
import sys
import time
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import *

def go():
? ? global name
? ? if entry.get()!='':
? ? ? ? name=entry.get()
? ? ? ? r1.destroy()
? ? else:
? ? ? ? messagebox.showerror('Error','昵称不得为空')

r1=Tk()
r1.title('聊天室')
r1.geometry('300x200+300+300')

label=Label(r1,text='进入聊天室之前,先起一个昵称')
label.pack(anchor='c',pady=20)

entry=Entry(r1,width=18)
entry.pack(anchor='c',pady=20)

button=Button(r1,text='进入聊天室',command=go)
button.pack(anchor='c',pady=20)

r1.mainloop()

# 为线程定义一个函数
#def th1():
def th2():
? ? global root
? ? global s
? ? global text1

? ? s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)?

? ? host = 'A6-PC'

? ? port = 12358

? ? s.connect((host, port))?
? ? while True:
? ? ? ? global msg
? ? ? ? global text1
? ? ? ? msg=s.recv(20480)
? ? ? ? text1['state']=NORMAL
? ? ? ? #print(msg.decode('utf-8'))
? ? ? ? text1.insert(END,msg.decode('utf-8'))
? ? ? ? text1['state']=DISABLED

global root
global s
global text1
global text2
global r
global sp
global cb
global v3
global v4
global size_
global family_
global fg_
global bg_
global name

root=Tk()
root.title('聊天室')

def send():
? ? global name
? ? if len(text2.get('1.0',END))==1 or text2.get('1.0',END).isspace() == True:
? ? ? ? messagebox.showerror('Error','输入不得为空')
? ? else:
? ? ? ? msg=time.ctime()+' '+name+': '+text2.get('1.0',END)
? ? ? ? s.send(msg.encode('utf-8'))
? ? text2.delete('1.0',END)
def configure():
? ? global r
? ? global sp
? ? global cb
? ? global v3
? ? global v4
? ? global size_
? ? global family_
? ? global fg_
? ? global bg_
? ? r=Tk()
? ? r.title('设置')
? ? r.resizable(0,0)
? ? v1=IntVar(r)
? ? v1.set(size_)
? ? v2=StringVar(r)
? ? v3=StringVar(r)
? ? v3.set(fg_)
? ? v4=StringVar(r)
? ? v4.set(bg_)
? ? l1=Label(r,text='文本大小')
? ? l1.grid(row=0,column=0,padx=10,pady=10)
? ? sp=Spinbox(r,from_=12,to=25,textvariable=v1,width=10)
? ? sp.grid(row=0,column=1,padx=10,pady=10)
? ? l2=Label(r,text='文本字体')
? ? l2.grid(row=0,column=2,padx=10,pady=10)
? ? value=('宋体','黑体','楷体','手书体','华文新魏','华文行楷','华文彩云','Edwardian Script ITC','Forte')
? ? cb=Combobox(r,textvariable=v2.get,value=value,width=10)
? ? cb.grid(row=0,column=3,padx=10,pady=10)
? ? cb.set(family_)
? ? l3=Label(r,text='文本颜色')
? ? l3.grid(row=1,column=0)
? ? op1=OptionMenu(r,v3,'','Black','DimGrey','Crimson','DarkOrange','GoldenRod','Green','LightSeaGreen','Indigo')
? ? op1.grid(row=1,column=1)
? ? l4=Label(r,text='背景颜色')
? ? l4.grid(row=1,column=2)
? ? op2=OptionMenu(r,v4,'','White','Gainsboro','LightPink','Bisque','Beige','LightGreen','LightSkyBlue','MediumPurple')
? ? op2.grid(row=1,column=3)
? ? b1=Button(r,text='完成',command=ok)
? ? b1.grid(row=2,column=0,pady=5,padx=5,columnspan=2)
? ? b2=Button(r,text='重置',command=reset)
? ? b2.grid(row=2,column=2,pady=5,padx=5,columnspan=2)
def ok():
? ? global r
? ? global sp
? ? global cb
? ? global v3
? ? global v4
? ? global size_
? ? global family_
? ? global fg_
? ? global bg_
? ? size_=sp.get()
? ? family_=cb.get()
? ? fg_=v3.get()
? ? bg_=v4.get()
? ? text1['font']=(family_,size_,'normal')
? ? text2['font']=(family_,size_,'normal')
? ? text1['fg']=fg_
? ? text1['bg']=bg_
? ? text2['fg']=fg_
? ? text2['bg']=bg_
? ? r.destroy()
def reset():
? ? global r
? ? global sp
? ? global cb
? ? global v3
? ? global v4
? ? global size_
? ? global family_
? ? global fg_
? ? global bg_
? ? size_=15
? ? family_='宋体'
? ? fg_='Black'
? ? bg_='White'
? ? text1['font']=(family_,size_,'normal')
? ? text2['font']=(family_,size_,'normal')
? ? text1['fg']=fg_
? ? text1['bg']=bg_
? ? text2['fg']=fg_
? ? text2['bg']=bg_
? ? r.destroy()
size_=15
family_='宋体'
fg_='Black'
bg_='White'

scrollbar=Scrollbar(root)

text1=Text(root,width=50,font=('宋体',15,'normal'),yscrollcommand=scrollbar.set,state=DISABLED,fg=fg_,bg=bg_)
text1.pack(side=LEFT,fill=BOTH,expand=1)
scrollbar.pack(side=LEFT,fill=Y)
scrollbar.config(command=text1.yview)

text2=Text(root,width=20,height=5,font=('宋体',15,'normal'),fg=fg_,bg=bg_)
text2.pack(side=TOP,padx=10,pady=10)

button=Button(root,text='发送',width=8,command=send)
button.pack(side=TOP,padx=10,pady=10)

menubar=Menu(root)
menu1=Menu(menubar,tearoff=0)
menubar.add_cascade(label='设置',menu=menu1)
menu1.add_command(label='设置选项',command=configure)
root.config(menu=menubar)
_thread.start_new_thread( th2, () )
root.mainloop()

# 创建两个线程
try:
? ?_thread.start_new_thread( th2, () )
except:
? ?print ("Error: 无法启动线程")

while 1:
? ?pass

?

希望大佬们批评指正!毕竟我还是初中生 (真)

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:33:48  更:2022-02-01 20:35:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:32:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码