tkinter+socket实现基本的实时收发消息

2023-11-19

tkinter+sockte实现基本的实时收发

tkinter

tkinter是比较简单的GUI界面设计块,有许多控件基本能实现很多简单的功能,比如很多应用软件安装时的GUI都可以实现。

在这个的功能里只用到模块的按钮(Button)、输入框(Entry)、输出框(Text)功能。

socket

socket用来创建服务器和客户端。

服务端代码

from tkinter import *
from socket import *
import threading
import time
class myapp(Tk):
    def __init__(self):
        super().__init__()
        self.title("完形填空")
        self.geometry("240x240")
        self.s=socket(AF_INET,SOCK_STREAM)
        self.host=''
        self.port=6666
        self.addr=(self.host,self.port)
        self.s.bind(self.addr)
        self.s.listen(5)
        self.entry=Entry(self)
        self.entry.place(x=0,y=0,width=240,height=60)
        b1=Button(self,text="连接",command=self.lianjie)
        b1.place(x=0,y=60,width=120,height=60)
        b2=Button(self,text="发送",command=self.fasong)
        b2.place(x=120,y=60,width=120,height=60)
        self.text=Text(self)
        self.text.place(x=0,y=120,width=240,height=120)
    def lianjie(self):
        self.tap,self.addr=self.s.accept()
        print(self.addr)
        t1=threading.Thread(target=self.jianting).start()
        
        
    def fasong(self):
        date=self.entry.get()
        self.tap.send(date.encode())
    def jianting(self):
        while True:
            sou=self.tap.recv(1024)
            if  sou:
                self.text.insert(END,sou.decode()+'\n')
            else :
                time.sleep(1)

if __name__ =='__main__':
    ap=myapp()
    ap.mainloop()



客户端代码

from tkinter import *
from socket import *
import threading
import time
class myapp(Tk):
    def __init__(self):
        super().__init__()
        self.title("完形填空")
        self.geometry("240x240")
        #self.host='192.168.100.4'
        #self.port=6666
        self.text=Text(self)
        self.text.place(x=0,y=120,width=240,height=60)
        self.add=('192.168.100.4',6666)
        self.s=socket(AF_INET,SOCK_STREAM)
        self.entry=Entry(self)
        self.entry.place(x=0,y=0,width=240,height=60)
        b1=Button(self,text="连接",command=self.lianjie)
        b1.place(x=0,y=60,width=120,height=60)
        b2=Button(self,text="发送",command=self.fasong)
        b2.place(x=120,y=60,width=120,height=60)
    def lianjie(self):
        self.s.connect(self.add)
        t1=threading.Thread(target=self.xunhuan).start()
    def xunhuan(self):
        
        while True:
            date=self.s.recv(1024)
            if date:
                self.text.insert(END,date.decode()+'\n')
            else :
                time.sleep(1)
    def fasong(self):
        date=self.entry.get()
        self.s.send(date.encode())
if __name__=='__main__':
    ap=myapp()
    ap.mainloop()
使用说明

服务端不用管,直接C和V就行
客户端需要更改一下’192.168.100.4’,将它改成服务端的ip地址即可。

两个程序的GUI界面都是一样的界面

上方空白处时Entry输入框,下方空白是输出框,服务端的按钮是打开服务器,客户端的按钮则是连接服务器。
在Entry中输入内容后,点击发送即可在另一方的输出端输出。

这是本人在学习tkinter和socke的一次学习记录,有任何问题或者想要讨论请加445532989,学习路上不孤单,谢谢大家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tkinter+socket实现基本的实时收发消息 的相关文章

随机推荐

  • STM32与Python上位机通过USB虚拟串口通信

    文章目录 前言 1 查看原理图 2 新建工程 3 添加代码与烧录 4 python代码编写 总结 问题解决思路 前言 在详细阅读广大网友的教程之后 我对STM32和Python通过USB通信的流程烂熟于心 尝试用ST公司的NUCLEO L4
  • SpringMvc之@RequestParam详解

    RequestParam是传递参数的 RequestParam用于将请求参数区数据映射到功能处理方法的参数上 public String queryUserName RequestParam String userName 在url中输入
  • c++面向过程和面向对象

    include
  • mysql 插入行 无论是否已存在

    当需要插入新的一行 但是行内容中的标识unique字段可能已经存在 使用replace into方式插入 当插入内容的unique字段在已有数据中不存在则正常插入 当插入内容的unique字段在已有数据中存在 则更新该字段内容为新输入的内容
  • java resource注解_关于 java中的 @Resource注解和@Autowired注解

    Resource 建议用 类全称 javax annotation Resource 默认注入方式 byName 反射机制 指定注入方式 a 如果使用name属性 则使用byName自动注入策略 gt Resource name good
  • linux 动态库so相关操作

    1 查看库版本号 一般在文件名上有版本号 若文件名上没有版本号 使用如下命令查看 readelf d libstdc so 2 查看库内函数 a nm d libstdc so grep 内容 b objdump tT libstdc so
  • kafka问题解决:org.apache.kafka.common.errors.TimeoutException

    记录使用kafka遇到的问题 1 Caused by java nio channels UnresolvedAddressException null 2 org apache kafka common errors TimeoutExc
  • 基于chatGLM-6B模型微调详细教程(linux版)(ptuning & lora)

    目录 准备工作 安装7z ptuning预训练 ChatGLM 6B Ptuning 7z 懒人包下载 上传文件并解压缩 拉取依赖 进行训练 启动服务 注意事项 揽睿星舟云算力平台 lora预训练 chatGLM All In One 7z
  • sqli-labs Less-8

    Less 8 Get Blind Boolian Based Single Quotes 1 原页面 2 id 1 3 id 1 4 尝试布尔盲注 代码存在sql注入漏洞 然而页面既不会回显数据 也不会回显错误信息 我们可以通过构造语句 来
  • Qt入门学习之常用界面设计组件(五)

    1 QComboBox QPlainTextEdit简介 QComboBox是下拉列表框组件类 它提供了一个下拉表供用户选择 也可以直接当作一个QLineEdit用作输入 QComboBox除了显示可见下拉列表外 每一个项 item 或称列
  • python爬虫与数据可视化报告_Python爬虫以及数据可视化分析!

    原标题 Python爬虫以及数据可视化分析 简单几步 通过Python对B站番剧排行数据进行爬取 并进行可视化分析 源码文件可以参考Github上传的项目 https github com Lemon Sheep Py tree maste
  • 六、SpringBoot——SpringMVC自动配置&扩展配置(web定制)

    1 SpringMVC自动配置 org springframework boot autoconfigure web web的所有web自动场景 以SpringMVC为例 Spring Boot 自动配置好了SpringMVC 以下是Spr
  • vue jest单元测试

    一 渲染 mount 和 shallowMount 1 1 mount 和 shallowMount vue test utils 提供了两种方式用于渲染 或者说 加载 mount 一个组件 mount 和 shallowMount 一个组
  • SQLite存取二进制数据

    程序功能 使用SQLite的C API操作SQLite数据库 存取二进制数据 用来测试的文件都小于65535字节 没有测试更大的文件 参考文档 http www cntxk com CataNews 56 info8106 html 编译环
  • C语言操作符的那些事(详细全)

    前言 C语言中操作符不多 但是有些相同的操作符都是在不同的表达式中 有不同的解释意思 比如 号 在表达式中5 5表示乘号 在int p表示指针 在 p 10中 又表示解引用 所以今天就来详细的整理一下C语言中的操作符 做到心中有数 可以一眼
  • 惊天大神坑 关于 python-socketio 与 socket.io-client 版本兼容问题

    在使用fastapi进行开发中 使用python socketio作为socketi库 前端项目使用vue开发 配合socket io client作为client端 我的python socketio版本号为4 6 0 前端socket
  • Java代码常用功能实现总结

    目录 1 获取当前系统时间 2 获取当前时间戳 3 获取主机名和IP 4 new String用法 5 ByteBuffer和String的互相转换 6 int和string相互转换 7 把多个json放到list中 8 List集合去除重
  • MarkdownPad2 下一些设置

    MarkdownPad2注册码 邮箱 Soar360 live com 授权秘钥 GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2 M5SN6bnxn2k
  • hive之生成唯一id

    1 针对没有变话的一张表生成id 表中数据固定不会增加修改 ROW NUMBER over 针对所有数据生成自增id 即使所有数据都相同 2 针对没有变化的表 根据字段生成自增id 注意cc11 和cc12我故意没按顺序摆放 这样做的好处是
  • tkinter+socket实现基本的实时收发消息

    tkinter sockte实现基本的实时收发 tkinter tkinter是比较简单的GUI界面设计块 有许多控件基本能实现很多简单的功能 比如很多应用软件安装时的GUI都可以实现 在这个的功能里只用到模块的按钮 Button 输入框