Python socket+ttkbootstrap,检测客户端正在输入
时间: 2023-10-07 07:09:45 浏览: 89
要检测客户端正在输入,可以使用Python的socket模块来监听客户端发来的数据。在tkinter中使用ttkbootstrap可以让界面看起来更加美观。
首先,我们需要创建一个socket服务器,监听客户端的连接:
```python
import socket
HOST = 'localhost' # 主机名
PORT = 8000 # 端口号
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定主机和端口号
server_socket.bind((HOST, PORT))
# 监听客户端连接
server_socket.listen(1)
print('等待客户端连接...')
# 接收客户端连接请求
client_socket, client_address = server_socket.accept()
print(f'客户端 {client_address} 已连接')
```
然后,在界面上创建一个文本框和一个按钮,用于输入文字和发送消息。使用ttkbootstrap的样式可以让界面看起来更美观。
```python
from tkinter import *
from tkinter import ttk
from ttkbootstrap import Style
# 创建界面
style = Style(theme='journal')
root = style.master
root.geometry('400x300')
root.title('Socket Chat')
# 创建文本框
text = Text(root, height=10, width=50)
text.pack(pady=10)
# 创建输入框和按钮
input_frame = Frame(root)
input_frame.pack(side=BOTTOM, padx=10, pady=10)
input_entry = ttk.Entry(input_frame, width=40)
input_entry.pack(side=LEFT)
send_button = ttk.Button(input_frame, text='发送', command=send_message)
send_button.pack(side=LEFT, padx=5)
```
在发送消息的函数中,我们可以监听输入框的内容是否发生变化,如果有变化,则说明客户端正在输入:
```python
def send_message():
# 获取输入框中的内容
message = input_entry.get()
if message:
# 发送消息给服务器
client_socket.sendall(message.encode('utf-8'))
# 清空输入框
input_entry.delete(0, END)
# 检测输入框是否正在编辑中
if input_entry.edit_modified():
# 如果正在编辑,则将输入框中的内容添加到文本框中
text.insert(END, '\n正在输入中...')
else:
# 如果没有编辑,则将输入框中的内容添加到文本框中
text.insert(END, '\n我:' + message)
```
在主循环中,我们需要不断地监听客户端发送的消息,并更新界面上的文本框:
```python
# 主循环
while True:
# 接收客户端发送的消息
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
# 更新文本框
text.insert(END, '\n客户端:' + data)
# 检测输入框是否正在编辑中
if input_entry.edit_modified():
# 如果正在编辑,则将输入框中的内容添加到文本框中
text.insert(END, '\n正在输入中...')
else:
# 如果没有编辑,则将输入框中的内容添加到文本框中
text.insert(END, '\n我:')
```
这样就可以实现在客户端输入时检测到输入状态了。完整代码如下:
阅读全文