前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python(第8节课------用python实现有界面的聊天功能)

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

作者头像
用户7886150
修改2020-12-29 14:18:14
9630
修改2020-12-29 14:18:14
举报
文章被收录于专栏:bit哲学院

参考链接: Python | 使用Tkinter进行消息编码-解码

一.类的继承 

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()

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档