系列文章
Python 学习之MQTT通讯与展示
前言
该程序来自作者的期末考试题目,因为觉得有趣,拿来给大家看看。
以下是一个简单的Python程序,它可以接收来自其他程序的循环不同的颜色块:
一、题目要求
用python接收别人发过来的循环不同的颜色块
二、代码步骤
1.源代码
代码如下(示例):
import tkinter as tk
import paho.mqtt.client as mqtt
MQTT_BROKER = "192.168.1.200"
MQTT_TOPIC = "python/course"
NUMBER_MESENAGE =12
window = tk.Tk()
window.title("3")
window.geometry("350x300")
client = mqtt.Client()
client.connect(MQTT_BROKER, 1883, 60)
def on_connect(client, userdata, flags, rc):
print("Connected with result code"+str(rc) )
client.subscribe(MQTT_TOPIC )
text = []
for i in range(NUMBER_MESENAGE):
text.append(tk.StringVar())
def on_messenage(client, userdata, msg):
if(msg.topic == MQTT_TOPIC ):
for i in range(NUMBER_MESENAGE-1):
text[i].set(text[i+1].get())
text[NUMBER_MESENAGE-1].set(str(msg.payload).strip('b').strip("'"))
# 在GUI中显示接收到的消息颜色
color = msg.payload.decode("utf-8").lower() # 将接收到的消息内容转换为小写,作为颜色
# 创建新的颜色块
color_block = tk.Label(scrollable_frame, bg=color, width=5, height=2)
color_block.pack()
# 滚动到最底部
canvas.update_idletasks()
canvas.yview_moveto(1)
client.on_connect = on_connect
client.on_message = on_messenage
# 创建滚动区域
canvas = tk.Canvas(window)
canvas.pack(side="left", fill="both", expand=True)
scrollbar = tk.Scrollbar(window, command=canvas.yview)
scrollbar.pack(side="right", fill="y")
canvas.configure(yscrollcommand=scrollbar.set)
scrollable_frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
for i in range(NUMBER_MESENAGE):
tk.Label(window, textvariable=text[i]).pack()
client.loop_start()
window.mainloop()
client.loop_stop()
client.disconnect()
2.代码思路
思路如下:
这个程序使用了tkinter库来创建GUI界面。
我们创建了一个主窗口,并添加了一个标签,用于显示接收到的颜色块。 我们使用socket库创建了一个套接字,并将其绑定到本地主机的8888端口。
我们使用listen()方法将套接字设置为监听状态,并使用accept()方法等待其他程序连接到该端口。当其他程序连接到该端口时,accept()方法将返回一个连接对象和连接的地址。
我们使用连接对象来接收来自其他程序的颜色块。
我们使用recv()方法从连接对象中接收数据,并使用decode()方法将其转换为字符串。
当我们接收到数据时,我们将其显示在标签中。最后,我们使用close()方法关闭连接对象,并使用destroy()方法关闭主窗口
总结
以上就是今天要讲的内容