Python——简单QQ聊天(类的继承,异常处理,socket,多线程,GUI)

简单QQ聊天

import tkinter as tk
import tkinter.messagebox
import tkinter.scrolledtext
from tkinter import *
import socket
import threading
def sendfun():
    txt=varSendtxt.get()
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    addr=('127.0.0.1',5002)
    cont=txt.encode('UTF-8')
    s.sendto(cont,addr)
    print('send:'+txt)
    varSendtxt.set('')
def listenshow():
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.bind(('0.0.0.0',5003))
    while True:
        data,addr=s.recvfrom(1024)
        txt=data.decode('UTF-8')
        txtCon.insert(END,txt+'\n')
 
win=tk.Tk()
varSendtxt=tk.StringVar(value='')
win['height']=400
win['width']=600
txtCon=tk.scrolledtext.ScrolledText(win,wrap=tk.WORD)
txtCon.place(x=5,y=5,width=600,height=300)
txtCon.insert(END,'提示:连接成功!!!'+'\n')
#单行文本框
en=tk.Entry(win,textvariable=varSendtxt)
en.place(x=5,y=320,width=600,height=20)

b1=tk.Button(win,text="发送",command=sendfun)
b1.place(x=30,y=350,width=100)
b2=tk.Button(win,text="取消")
b2.place(x=130,y=350,width=100)

t=threading.Thread(target=listenshow,args=())
t.start()

win.mainloop()

类的继承

#类的继承
class A():
    ax1=0
    def __init__(self,p=0):
        print('A')
        self.ax1=p
    def fun1(self):
        print('A_fun1')
        print(self.ax1)
x=A(100)
y=A()
x.fun1()
y.fun1()
print("************************************")
class B(A):
    def __init__(self,p=0):
        super().__init__(p*2)
        print('B')
    def fun2(self):
        print("B_fun2")
z=B()
z.fun1()
print("````````````````````````````````")
t=B(10)
t.fun1()
t.fun2()

异常处理

#try except
x=input("输入整数:")
try:
    y=int(x)
except ValueError as e:
    print(e)
#try except finally
try:
    open('c:/a.txt','r').read()
except FileNotFoundError as e:
    print(e)
finally:
    print("this is 结束")

socket

#socket
import socket
#发送端
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
addr=('127.0.0.1',5001)
while True:
    txt=input("请输入要发送的消息:")
    s.sendto(txt.encode('UTF-8'),addr)
#接收端
import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('0.0.0.0',5001))
while True:
    data,addr=s.recvfrom(1024)
    print(data.decode('UTF-8'))

多线程

#多线程
import threading
def fun1():
    for i in range(50):
        print('我是线程1')
def fun2():
    for i in range(50):
        print('我是线程2')
t1=threading.Thread(target=fun1,args=())
t2=threading.Thread(target=fun2,args=())
t1.start()
t2.start()

GUI

#GUI
import tkinter as tk
import tkinter.messagebox
from tkinter import *
def fun1():
    x=en1.get()
    y=en2.get()
    if x=='amdin' and y=='123456':
        tk.messagebox.showinfo(title='提示',message="登陆成功")
    else:
        tk.messagebox.showerror(title='提示',message="用户名或密码错误")
def fun2():
    en1.delete(0,END)
    en2.delete(0,END)
    
root=tk.Tk()
root.title('登录界面')
root['height']=200
root['width']=300
#放一个密码和用户名的验证
la1=tk.Label(root,text='用户名')
la1.place(x=5,y=25,width=80,height=20)
en1=tk.Entry(root)
en1.place(x=100,y=25,width=180,height=20)
la2=tk.Label(root,text='密码')
la2.place(x=5,y=55,width=80,height=20)
en2=tk.Entry(root,show='*')
en2.place(x=100,y=55,width=180,height=20)
b1=tk.Button(root,text='登录',command=fun1)
b1.place(x=50,y=100,width=100)
b2=tk.Button(root,text='取消',command=fun2)
b2.place(x=150,y=100,width=100)
root.mainloop()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值