最近在学习pyqt5,因为我们是做远程物联网设备的,所以就做个mqtt调试助手来练手。第一次做这种程序,没有加异常处理,会有很多不足,欢迎留言拍砖,直接上代码了

这个是程序入口,

 # 使用前先安装pyqt5和mqtt包
# 方法:
# pip install PyQt5
# pip install paho-mqtt import sys
import time from PyQt5.Qt import *
from paho.mqtt import client as mqtt
from TszsUI import Ui_MainWindow class Window(QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self) def mqttlj(self):
client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
self.client = mqtt.Client(client_id)
self.client.username_pw_set(self.Username, self.Password)
self.client.on_connect = self.on_connect
self.client.on_message = self.on_message
self.client.connect(self.HOST, int(self.PORT), 60)
# client.loop_forever() # 用这一句,服务器可以链接上,但是程序会阻塞在这里,使ui处于假死状态,所以换下面一句
self.client.loop_start() # 用loop_start()程序会自动开新的线程连接并等待消息的到来
print(self.Username, self.Password, self.HOST, self.PORT) def conn_Ck(self):
self.Username = self.Name_lineEdit.text() # 用户名
self.Password = self.Pwd_lineEdit.text() #密码
self.HOST = self.Ip_lineEdit.text() #host 地址
self.PORT = self.Port_lineEdit.text() #端口号
self.SubTopic = self.Sub_lineEdit.text() # 订阅的主题
self.PubTopic = self.Pub_lineEdit.text() # 发布的主题
print(self.PubTopic)
self.mqttlj()
print("连接") def dk_puBtn(self):
self.client.loop_stop()
self.Conn_label.setText("连接断开")
self.dk_Button.setEnabled(False)
self.pushButton.setEnabled(True)
print("断开链接") def send_Ck(self):
self.payload = self.textEdit.toPlainText()
self.on_publish(self.PubTopic,self.payload)
print(self.PubTopic)
print(self.payload)
print("发送") def on_connect(self,client, userdata, flags, rc):
if rc == 0: # rc连接标志,成功会返回0
print(rc)
self.Conn_label.setText("连接成功")
self.dk_Button.setEnabled(True)
self.pushButton.setEnabled(False)
print("Connected with result code " + str(rc))
print(userdata)
print(flags)
client.subscribe(self.SubTopic) def on_message(self,client, userdata, msg):
mm = str(msg.payload).split("'") # 把接收到的字符串分割 ,分隔符是单引号 ‘
missige=mm[1] # 取出收到的消息 print(msg.topic+" " + ":" + missige) #打印接收的消息
self.Rece_text.append(msg.topic+" " + ":" + missige) def on_publish(self,topic,payload,qos = 1): # 发布消息函数
self.client.publish(topic,payload,qos) if __name__ =='__main__':
app = QApplication(sys.argv)
window = Window() window.show()
sys.exit(app.exec_())

界面ui实现,是通过pyuic转过来的

 # -*- coding: utf-8 -*-

 # Form implementation generated from reading ui file 'Mqtt.ui'
#
# Created by: PyQt5 UI code generator 5.14.0
#
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowModality(QtCore.Qt.NonModal)
MainWindow.resize(500, 600)
MainWindow.setMinimumSize(QtCore.QSize(500, 600))
MainWindow.setMaximumSize(QtCore.QSize(500, 600))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setGeometry(QtCore.QRect(10, 10, 471, 211))
self.groupBox.setObjectName("groupBox")
self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
self.gridLayout.setObjectName("gridLayout")
self.Name_label = QtWidgets.QLabel(self.groupBox)
self.Name_label.setObjectName("Name_label")
self.gridLayout.addWidget(self.Name_label, 0, 0, 1, 1)
self.Name_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Name_lineEdit.setObjectName("Name_lineEdit")
self.gridLayout.addWidget(self.Name_lineEdit, 0, 1, 1, 3)
self.Pwd_label = QtWidgets.QLabel(self.groupBox)
self.Pwd_label.setObjectName("Pwd_label")
self.gridLayout.addWidget(self.Pwd_label, 1, 0, 1, 1)
self.Pwd_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Pwd_lineEdit.setObjectName("Pwd_lineEdit")
self.gridLayout.addWidget(self.Pwd_lineEdit, 1, 1, 1, 3)
self.IP_label = QtWidgets.QLabel(self.groupBox)
self.IP_label.setObjectName("IP_label")
self.gridLayout.addWidget(self.IP_label, 2, 0, 1, 1)
self.Ip_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Ip_lineEdit.setObjectName("Ip_lineEdit")
self.gridLayout.addWidget(self.Ip_lineEdit, 2, 1, 1, 3)
self.Port_label = QtWidgets.QLabel(self.groupBox)
self.Port_label.setObjectName("Port_label")
self.gridLayout.addWidget(self.Port_label, 3, 0, 1, 1)
self.Port_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Port_lineEdit.setObjectName("Port_lineEdit")
self.gridLayout.addWidget(self.Port_lineEdit, 3, 1, 1, 3)
self.Sub_label = QtWidgets.QLabel(self.groupBox)
self.Sub_label.setObjectName("Sub_label")
self.gridLayout.addWidget(self.Sub_label, 4, 0, 1, 1)
self.Sub_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Sub_lineEdit.setObjectName("Sub_lineEdit")
self.gridLayout.addWidget(self.Sub_lineEdit, 4, 1, 1, 3)
self.Pub_label = QtWidgets.QLabel(self.groupBox)
self.Pub_label.setObjectName("Pub_label")
self.gridLayout.addWidget(self.Pub_label, 5, 0, 1, 1)
self.Pub_lineEdit = QtWidgets.QLineEdit(self.groupBox)
self.Pub_lineEdit.setObjectName("Pub_lineEdit")
self.gridLayout.addWidget(self.Pub_lineEdit, 5, 1, 1, 3)
self.State_label = QtWidgets.QLabel(self.groupBox)
self.State_label.setObjectName("State_label")
self.gridLayout.addWidget(self.State_label, 6, 0, 1, 1)
self.Conn_label = QtWidgets.QLabel(self.groupBox)
self.Conn_label.setStyleSheet("color: rgb(0, 0, 255);")
self.Conn_label.setObjectName("Conn_label")
self.gridLayout.addWidget(self.Conn_label, 6, 1, 1, 1)
self.pushButton = QtWidgets.QPushButton(self.groupBox)
self.pushButton.setObjectName("pushButton")
self.gridLayout.addWidget(self.pushButton, 6, 2, 1, 1)
self.dk_Button = QtWidgets.QPushButton(self.groupBox)
self.dk_Button.setEnabled(False)
self.dk_Button.setObjectName("dk_Button")
self.gridLayout.addWidget(self.dk_Button, 6, 3, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_2.setGeometry(QtCore.QRect(10, 230, 471, 121))
self.groupBox_2.setObjectName("groupBox_2")
self.Rece_text = QtWidgets.QTextEdit(self.groupBox_2)
self.Rece_text.setGeometry(QtCore.QRect(10, 20, 451, 91))
self.Rece_text.setObjectName("Rece_text")
self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox_3.setGeometry(QtCore.QRect(10, 360, 471, 141))
self.groupBox_3.setObjectName("groupBox_3")
self.textEdit = QtWidgets.QTextEdit(self.groupBox_3)
self.textEdit.setGeometry(QtCore.QRect(10, 20, 451, 111))
self.textEdit.setObjectName("textEdit")
self.Send_pushButton = QtWidgets.QPushButton(self.centralwidget)
self.Send_pushButton.setGeometry(QtCore.QRect(330, 520, 141, 23))
self.Send_pushButton.setObjectName("Send_pushButton")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 23))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow)
self.pushButton.clicked.connect(MainWindow.conn_Ck)
self.Send_pushButton.clicked.connect(MainWindow.send_Ck)
self.dk_Button.clicked.connect(MainWindow.dk_puBtn)
QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MQTT调试助手"))
self.groupBox.setTitle(_translate("MainWindow", "连接配置"))
self.Name_label.setText(_translate("MainWindow", "用 户 名:"))
self.Name_lineEdit.setText(_translate("MainWindow", "name"))
self.Pwd_label.setText(_translate("MainWindow", "密 码:"))
self.Pwd_lineEdit.setText(_translate("MainWindow", "pass"))
self.IP_label.setText(_translate("MainWindow", "IP 地 址:"))
self.Ip_lineEdit.setText(_translate("MainWindow", "ip"))
self.Port_label.setText(_translate("MainWindow", "端 口 号:"))
self.Port_lineEdit.setText(_translate("MainWindow", ""))
self.Sub_label.setText(_translate("MainWindow", "订阅的主题:"))
self.Sub_lineEdit.setText(_translate("MainWindow", "sub/"))
self.Pub_label.setText(_translate("MainWindow", "发布的主题:"))
self.Pub_lineEdit.setText(_translate("MainWindow", "pub/"))
self.State_label.setText(_translate("MainWindow", "连接状态:"))
self.Conn_label.setText(_translate("MainWindow", "连接断开"))
self.pushButton.setText(_translate("MainWindow", "连接"))
self.dk_Button.setText(_translate("MainWindow", "断开"))
self.groupBox_2.setTitle(_translate("MainWindow", "数据接收"))
self.groupBox_3.setTitle(_translate("MainWindow", "数据发送"))
self.textEdit.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-family:\'SimSun\';\">qweqwe</span></p></body></html>"))
self.Send_pushButton.setText(_translate("MainWindow", "发送"))

最新文章

  1. 一键搞定JavaEE应用,JRE+Tomcat+Mysql-JaveEE绿色运行环境JTM0.9版
  2. iOS中的通知
  3. sphinx 增量索引 实现近实时更新
  4. ubuntu 彻底删除卸载
  5. unity3d中Find的用法
  6. ping通IP,telnet 3306不通
  7. SASS安装的那些事
  8. GDI+: Curved Shapes
  9. WinForm 进程和线程
  10. Linux-ubuntu安装过程讲解
  11. 自己动手写Redis客户端(C#实现)4 - 整数回复
  12. springboot整合mybaits注解开发
  13. 异常检测算法:Isolation Forest
  14. vscode前端常用插件推荐,搭建JQuery、Vue等开发环境
  15. WebStorm 配置微信小程序开发 用html样式打开wxml 用css样式打开wxss 配置微信小程序提醒
  16. flask项目第一次如何运行创建数据库
  17. MySql DDL语言(数据库和数据表的管理)
  18. Oracle常用函数——TO_DATE
  19. (转)WAMP多站点配置
  20. 基于约束的SQL攻击

热门文章

  1. Docker容器化【Dockerfile编写&amp;&amp;搭建与使用Docker私有仓库】
  2. 14 微服务电商【黑马乐优商城】:day02-springcloud(理论篇四:配置Robbin负载均衡)
  3. 为什么使用 document.write 需要将&lt;/script&gt;拆分开
  4. springboot多数据源+jta事务管理配置
  5. springboot集成websocket实现大文件分块上传
  6. php对比二个不同的二维数组
  7. JavaScript中遍历数组,最好不要用for...in
  8. [LC] 293. Flip Game
  9. C#常用到的命令及常用控件的属性
  10. GenerateId类:生成唯一id、订单号