python(第8节课------用python实现有界面的聊天功能)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/jjsjsjjdj/article/details/102673011

一.类的继承

class people:
    name=""
    def __init__(self,name=""):
        self.name=name
    
    def self_introduce(self):
        print("我是",self.name)
                        
class woman(people):
    sex="女"
    def __init__(self,name):
        super().__init__(name)
        print("我是一个%s生"%self.sex)
    
    def say(self):
        print("很高兴认识大家")
 


Alice_Father=people("Alice_Father")
Alice_Father.self_introduce()

print("-----------------")
Alice=woman("Alice")
Alice.self_introduce()
Alice.say()

二.try excpet


x=input("请输入一个整数")
y=0
try:               #1.检查是否出现错误
    y=int(x)
except:            #2.出现错误时执行
    print("输入错误")
finally:
    print("结束")   #3.不管对错都会执行

三.UDP通讯

1.发送方

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #1.创建套接字
addr=("127.0.0.1",5001)                            #2.发送地址
while 1:                                          #3.循环输入发送信息
    txt=input("请输入要发送的消息:")             #4.编码发送
    s.sendto(txt.encode("utf-8"),addr)

2.接收方

import socket                        
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #1.创建套接字
s.bind(("0.0.0.0",5001))                           #2.绑定接收端口
while 1:                                          #3.接收消息并解码
    data,addr=s.recvfrom(1024)                  
    print(data.decode("UTF-8"))

四.多线程


def fun1():
    for i in range(10):         
        print("我是线程1")

def fun2():
    for i in range(10):         
        print("我是线程2")
import threading
t1=threading.Thread(target=fun1,args=())  #创建线程t1,t2抢占cpu交替进行
t2=threading.Thread(target=fun2,args=()) 
t1.start()
t2.start()

五.GUI

import tkinter as tk
import tkinter.messagebox
from tkinter import *


#----------------------一、定义按钮功能--------------------------------------
#登录按钮:验证用户登录信息是否正确
def fun1():
    x=en1.get()   #1.获取文本
    y=en2.get()
    if x=="admin" and y=="123456":   #2.验证
        tk.messagebox.showinfo(message="登陆成功")#弹出提示框
    else:
        tk.messagebox.showerror(message="用户名或密码错误")#弹出错误框

#取消按钮:清空输入的信息
def fun2():
    en1.delete(0,END)
    en2.delete(0,END)
        
#0.创建界面
root=tk.Tk()         #1.创建界面
root["height"]=150   #2.定义界面高度
root["width"]=300    #3.定义界面宽度

#1.用户名---文本框
lal=tk.Label(root,text="用户名")       #在root中创建标签
lal.place(x=5,y=5,width=80,height=20)  #向root放置标签
en1=tk.Entry(root)                       #在root中创建文本框
en1.place(x=100,y=5,width=180,height=20) #向root放置文本框

#2.密码-----密码框
lal2=tk.Label(root,text="密码")  
lal2.place(x=5,y=5+30,width=80,height=20)
en2=tk.Entry(root,show="*")      #show:将输入的内容用*代替
en2.place(x=100,y=5+30,width=180,height=20)

#3.登录------按钮
b1=tk.Button(root,text="登录",command=fun1)  #定义:按钮名称+按钮功能
b1.place(x=50,y=25+30+30,width=100)          #定义:按钮大小+按钮位置

#4.取消------按钮
b2=tk.Button(root,text="取消",command=fun2)
b2.place(x=180,y=25+30+30,width=100)

root.mainloop()#界面生成

六.综合训练:用python实现有界面的聊天功能

注意:
1. 使用jupyter Notebook,软件容易出问题,采用两个Ipython进行实验
2. 使用时,两个程序的发送地址和接收地址的端口号要进行对调
**

#---------------一、导入模块--------------------------
import socket
import threading
import tkinter as tk
import tkinter.messagebox
import tkinter.scrolledtext
from tkinter import *

#---------------二、定义按钮功能---------------------------
#1.发送
def fun1():
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)  #申请套接字
    addr=("127.0.0.1",5001)           #发送地址(IP地址+端口号)
    txt=en.get()                      #发送的消息
    s.sendto(txt.encode("UTF-8"),addr)   
    en.delete(0,END)                  #清空发送框
 
#2.接收
def fun2():
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.bind(("0.0.0.0",5003))        #绑定接收端口
    while 1:                       #循环接收消息,插入到滑动窗口
        data,addr=s.recvfrom(2048)  #接收消息和发送方的地址
        print(addr)
        txtCon.insert(END,data.decode("UTF-8")+"\n")
 
#3.取消
def fun3():
    en.delete(0,END)   #清空发送框

    
#-----------------三、定义界面-------------------------
#1.窗口
win=tk.Tk()
win["height"]=400
win["width"]=600


#2.滑动面板
txtCon=tk.scrolledtext.ScrolledText(win,wrap=tk.WORD)
#txtCon.pack(fill=tk.BOTH)
txtCon.place(x=5,y=5,width=600,height=300)

#3.发送框
en=tk.Entry(win,text="")
en.place(x=5,y=5+300+20,width=600,height=20)

#4.按钮
b1=tk.Button(win,text="发送",command=fun1)
b1.place(x=30,y=350,width=100)
b2=tk.Button(win,text="取消",command=fun3)
b2.place(x=130,y=350,width=100)

#----------------四、创建接收线程--------------
t=threading.Thread(target=fun2,args=())
t.start()

win.mainloop()

猜你喜欢

转载自blog.csdn.net/jjsjsjjdj/article/details/102673011
今日推荐