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

这个是程序入口,

  1. # 使用前先安装pyqt5和mqtt包
  2. # 方法:
  3. # pip install PyQt5
  4. # pip install paho-mqtt
  5.  
  6. import sys
  7. import time
  8.  
  9. from PyQt5.Qt import *
  10. from paho.mqtt import client as mqtt
  11. from TszsUI import Ui_MainWindow
  12.  
  13. class Window(QMainWindow,Ui_MainWindow):
  14. def __init__(self):
  15. super().__init__()
  16. self.setupUi(self)
  17.  
  18. def mqttlj(self):
  19. client_id = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
  20. self.client = mqtt.Client(client_id)
  21. self.client.username_pw_set(self.Username, self.Password)
  22. self.client.on_connect = self.on_connect
  23. self.client.on_message = self.on_message
  24. self.client.connect(self.HOST, int(self.PORT), 60)
  25. # client.loop_forever() # 用这一句,服务器可以链接上,但是程序会阻塞在这里,使ui处于假死状态,所以换下面一句
  26. self.client.loop_start() # 用loop_start()程序会自动开新的线程连接并等待消息的到来
  27. print(self.Username, self.Password, self.HOST, self.PORT)
  28.  
  29. def conn_Ck(self):
  30. self.Username = self.Name_lineEdit.text() # 用户名
  31. self.Password = self.Pwd_lineEdit.text() #密码
  32. self.HOST = self.Ip_lineEdit.text() #host 地址
  33. self.PORT = self.Port_lineEdit.text() #端口号
  34. self.SubTopic = self.Sub_lineEdit.text() # 订阅的主题
  35. self.PubTopic = self.Pub_lineEdit.text() # 发布的主题
  36. print(self.PubTopic)
  37. self.mqttlj()
  38. print("连接")
  39.  
  40. def dk_puBtn(self):
  41. self.client.loop_stop()
  42. self.Conn_label.setText("连接断开")
  43. self.dk_Button.setEnabled(False)
  44. self.pushButton.setEnabled(True)
  45. print("断开链接")
  46.  
  47. def send_Ck(self):
  48. self.payload = self.textEdit.toPlainText()
  49. self.on_publish(self.PubTopic,self.payload)
  50. print(self.PubTopic)
  51. print(self.payload)
  52. print("发送")
  53.  
  54. def on_connect(self,client, userdata, flags, rc):
  55. if rc == 0: # rc连接标志,成功会返回0
  56. print(rc)
  57. self.Conn_label.setText("连接成功")
  58. self.dk_Button.setEnabled(True)
  59. self.pushButton.setEnabled(False)
  60. print("Connected with result code " + str(rc))
  61. print(userdata)
  62. print(flags)
  63. client.subscribe(self.SubTopic)
  64.  
  65. def on_message(self,client, userdata, msg):
  66. mm = str(msg.payload).split("'") # 把接收到的字符串分割 ,分隔符是单引号 ‘
  67. missige=mm[1] # 取出收到的消息 print(msg.topic+" " + ":" + missige) #打印接收的消息
  68. self.Rece_text.append(msg.topic+" " + ":" + missige)
  69.  
  70. def on_publish(self,topic,payload,qos = 1): # 发布消息函数
  71. self.client.publish(topic,payload,qos)
  72.  
  73. if __name__ =='__main__':
  74. app = QApplication(sys.argv)
  75. window = Window()
  76.  
  77. window.show()
  78. sys.exit(app.exec_())

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

  1. # -*- coding: utf-8 -*-
  2.  
  3. # Form implementation generated from reading ui file 'Mqtt.ui'
  4. #
  5. # Created by: PyQt5 UI code generator 5.14.0
  6. #
  7. # WARNING! All changes made in this file will be lost!
  8.  
  9. from PyQt5 import QtCore, QtGui, QtWidgets
  10.  
  11. class Ui_MainWindow(object):
  12. def setupUi(self, MainWindow):
  13. MainWindow.setObjectName("MainWindow")
  14. MainWindow.setWindowModality(QtCore.Qt.NonModal)
  15. MainWindow.resize(500, 600)
  16. MainWindow.setMinimumSize(QtCore.QSize(500, 600))
  17. MainWindow.setMaximumSize(QtCore.QSize(500, 600))
  18. self.centralwidget = QtWidgets.QWidget(MainWindow)
  19. self.centralwidget.setObjectName("centralwidget")
  20. self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
  21. self.groupBox.setGeometry(QtCore.QRect(10, 10, 471, 211))
  22. self.groupBox.setObjectName("groupBox")
  23. self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
  24. self.gridLayout.setObjectName("gridLayout")
  25. self.Name_label = QtWidgets.QLabel(self.groupBox)
  26. self.Name_label.setObjectName("Name_label")
  27. self.gridLayout.addWidget(self.Name_label, 0, 0, 1, 1)
  28. self.Name_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  29. self.Name_lineEdit.setObjectName("Name_lineEdit")
  30. self.gridLayout.addWidget(self.Name_lineEdit, 0, 1, 1, 3)
  31. self.Pwd_label = QtWidgets.QLabel(self.groupBox)
  32. self.Pwd_label.setObjectName("Pwd_label")
  33. self.gridLayout.addWidget(self.Pwd_label, 1, 0, 1, 1)
  34. self.Pwd_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  35. self.Pwd_lineEdit.setObjectName("Pwd_lineEdit")
  36. self.gridLayout.addWidget(self.Pwd_lineEdit, 1, 1, 1, 3)
  37. self.IP_label = QtWidgets.QLabel(self.groupBox)
  38. self.IP_label.setObjectName("IP_label")
  39. self.gridLayout.addWidget(self.IP_label, 2, 0, 1, 1)
  40. self.Ip_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  41. self.Ip_lineEdit.setObjectName("Ip_lineEdit")
  42. self.gridLayout.addWidget(self.Ip_lineEdit, 2, 1, 1, 3)
  43. self.Port_label = QtWidgets.QLabel(self.groupBox)
  44. self.Port_label.setObjectName("Port_label")
  45. self.gridLayout.addWidget(self.Port_label, 3, 0, 1, 1)
  46. self.Port_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  47. self.Port_lineEdit.setObjectName("Port_lineEdit")
  48. self.gridLayout.addWidget(self.Port_lineEdit, 3, 1, 1, 3)
  49. self.Sub_label = QtWidgets.QLabel(self.groupBox)
  50. self.Sub_label.setObjectName("Sub_label")
  51. self.gridLayout.addWidget(self.Sub_label, 4, 0, 1, 1)
  52. self.Sub_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  53. self.Sub_lineEdit.setObjectName("Sub_lineEdit")
  54. self.gridLayout.addWidget(self.Sub_lineEdit, 4, 1, 1, 3)
  55. self.Pub_label = QtWidgets.QLabel(self.groupBox)
  56. self.Pub_label.setObjectName("Pub_label")
  57. self.gridLayout.addWidget(self.Pub_label, 5, 0, 1, 1)
  58. self.Pub_lineEdit = QtWidgets.QLineEdit(self.groupBox)
  59. self.Pub_lineEdit.setObjectName("Pub_lineEdit")
  60. self.gridLayout.addWidget(self.Pub_lineEdit, 5, 1, 1, 3)
  61. self.State_label = QtWidgets.QLabel(self.groupBox)
  62. self.State_label.setObjectName("State_label")
  63. self.gridLayout.addWidget(self.State_label, 6, 0, 1, 1)
  64. self.Conn_label = QtWidgets.QLabel(self.groupBox)
  65. self.Conn_label.setStyleSheet("color: rgb(0, 0, 255);")
  66. self.Conn_label.setObjectName("Conn_label")
  67. self.gridLayout.addWidget(self.Conn_label, 6, 1, 1, 1)
  68. self.pushButton = QtWidgets.QPushButton(self.groupBox)
  69. self.pushButton.setObjectName("pushButton")
  70. self.gridLayout.addWidget(self.pushButton, 6, 2, 1, 1)
  71. self.dk_Button = QtWidgets.QPushButton(self.groupBox)
  72. self.dk_Button.setEnabled(False)
  73. self.dk_Button.setObjectName("dk_Button")
  74. self.gridLayout.addWidget(self.dk_Button, 6, 3, 1, 1)
  75. self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
  76. self.groupBox_2.setGeometry(QtCore.QRect(10, 230, 471, 121))
  77. self.groupBox_2.setObjectName("groupBox_2")
  78. self.Rece_text = QtWidgets.QTextEdit(self.groupBox_2)
  79. self.Rece_text.setGeometry(QtCore.QRect(10, 20, 451, 91))
  80. self.Rece_text.setObjectName("Rece_text")
  81. self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
  82. self.groupBox_3.setGeometry(QtCore.QRect(10, 360, 471, 141))
  83. self.groupBox_3.setObjectName("groupBox_3")
  84. self.textEdit = QtWidgets.QTextEdit(self.groupBox_3)
  85. self.textEdit.setGeometry(QtCore.QRect(10, 20, 451, 111))
  86. self.textEdit.setObjectName("textEdit")
  87. self.Send_pushButton = QtWidgets.QPushButton(self.centralwidget)
  88. self.Send_pushButton.setGeometry(QtCore.QRect(330, 520, 141, 23))
  89. self.Send_pushButton.setObjectName("Send_pushButton")
  90. MainWindow.setCentralWidget(self.centralwidget)
  91. self.menubar = QtWidgets.QMenuBar(MainWindow)
  92. self.menubar.setGeometry(QtCore.QRect(0, 0, 500, 23))
  93. self.menubar.setObjectName("menubar")
  94. MainWindow.setMenuBar(self.menubar)
  95. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  96. self.statusbar.setObjectName("statusbar")
  97. MainWindow.setStatusBar(self.statusbar)
  98.  
  99. self.retranslateUi(MainWindow)
  100. self.pushButton.clicked.connect(MainWindow.conn_Ck)
  101. self.Send_pushButton.clicked.connect(MainWindow.send_Ck)
  102. self.dk_Button.clicked.connect(MainWindow.dk_puBtn)
  103. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  104.  
  105. def retranslateUi(self, MainWindow):
  106. _translate = QtCore.QCoreApplication.translate
  107. MainWindow.setWindowTitle(_translate("MainWindow", "MQTT调试助手"))
  108. self.groupBox.setTitle(_translate("MainWindow", "连接配置"))
  109. self.Name_label.setText(_translate("MainWindow", "用 户 名:"))
  110. self.Name_lineEdit.setText(_translate("MainWindow", "name"))
  111. self.Pwd_label.setText(_translate("MainWindow", "密 码:"))
  112. self.Pwd_lineEdit.setText(_translate("MainWindow", "pass"))
  113. self.IP_label.setText(_translate("MainWindow", "IP 地 址:"))
  114. self.Ip_lineEdit.setText(_translate("MainWindow", "ip"))
  115. self.Port_label.setText(_translate("MainWindow", "端 口 号:"))
  116. self.Port_lineEdit.setText(_translate("MainWindow", ""))
  117. self.Sub_label.setText(_translate("MainWindow", "订阅的主题:"))
  118. self.Sub_lineEdit.setText(_translate("MainWindow", "sub/"))
  119. self.Pub_label.setText(_translate("MainWindow", "发布的主题:"))
  120. self.Pub_lineEdit.setText(_translate("MainWindow", "pub/"))
  121. self.State_label.setText(_translate("MainWindow", "连接状态:"))
  122. self.Conn_label.setText(_translate("MainWindow", "连接断开"))
  123. self.pushButton.setText(_translate("MainWindow", "连接"))
  124. self.dk_Button.setText(_translate("MainWindow", "断开"))
  125. self.groupBox_2.setTitle(_translate("MainWindow", "数据接收"))
  126. self.groupBox_3.setTitle(_translate("MainWindow", "数据发送"))
  127. self.textEdit.setHtml(_translate("MainWindow", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
  128. "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
  129. "p, li { white-space: pre-wrap; }\n"
  130. "</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
  131. "<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>"))
  132. self.Send_pushButton.setText(_translate("MainWindow", "发送"))

用pyqt5简单实现Mqtt调试助手-初学python的更多相关文章

  1. 15-网页,网站,微信公众号基础入门(网页版MQTT,做自己的MQTT调试助手)

    https://www.cnblogs.com/yangfengwu/p/11198572.html 说一下哈,,如果教程哪里看不明白...就去自己百度补充哪一部分,,学习不是死记硬背,需要会学习,永 ...

  2. TCP调试助手

    网络开发经常要用到一些TCP&UDP的调试工具,搜集一些备用. 目前总结工具有(不分先后): chrome等自带调试器调试HTTP Fiddler(.NET)和Charles debugger ...

  3. 利用ZYNQ SOC快速打开算法验证通路(2)——数据传输最简方案:网络调试助手+W5500协议栈芯片

    在上一篇该系列博文中讲解了MATLAB待处理数据写入.bin二进制数据文件的过程,接下来需要将数据通过以太网发送到ZYNQ验证平台.之前了解过Xilinx公司面向DSP开发的System Genera ...

  4. 串口调试助手vc源程序及其详细编写过程

    串口调试助手vc源程序及其详细编写过程   目次: 1.建立项目 2.在项目中插入MSComm控件 3.利用ClassWizard定义CMSComm类控制变量 4.在对话框中添加控件 5.添加串口事件 ...

  5. 基于.Net C# 通信开发-网络调试助手

    基于.Net C# 通信开发-网络调试助手1.概述 网络调试助手是集TCP/UDP服务端客户端一体的网络调试工具,可以帮助网络应用设计.开发.测试人员检查所开发的网络应用软硬件的数据收发状况,提高开发 ...

  6. Qt 4.x调试器问题,缺失调试助手。

    之前项目开发需要用到4.x环境,固定多少版本避免团队开发不协调,然后拿了同事的开发包安装[注:我本子上原来就有4.x版本跟5.x版本,只是对应的4.x跟需求的不一样] creator是2.4.1的,同 ...

  7. STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题

    STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085的问题讨论:http://www.rt-thr ...

  8. 托管调试助手“NonComVisibleBaseClass”检测到问题

    最近 一次在研究 自动化测试框架White ,程序总是报   “托管调试助手“NonComVisibleBaseClass”在“d:\xxxxxxxxxx.vshost.exe”中检测到问题.” 其他 ...

  9. 杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用

    杭州蓝松科技推出的安卓端的USB转串口调试助手, 欢迎下载使用 下载地址:http://files.cnblogs.com/guobaPlayer/%E8%93%9D%E6%9D%BEUSB%E4%B ...

随机推荐

  1. 17.3.13---socket网络套接字介绍--函数和数据类型

    1----Socket类型 套接字格式:socket(family,type[,protocal])使用给定的地址族,套接字类型,协议编号(默认为0)来创建套接字 socket类型 描述 socket ...

  2. 吴裕雄--天生自然 JAVA开发学习:抽象类

    public abstract class Employee { private String name; private String address; private int number; pu ...

  3. 利用CSS制作背景变色的横向导航栏

    1.表单 页面如下: <html> <head> <title>注册表单页面</title> </head> <body> &l ...

  4. Linux 创建静态库.a

    gcc -c 只编译不连接 -o *.o(生成.o文件) ar crv  name.a   *.o *.o  (ar 命令把 .o文件打包成  name.a 静态库) 测试 name.a -L 紧跟链 ...

  5. The Maximum Unreachable Node Set

    题目描述 In this problem, we would like to talk about unreachable sets of a directed acyclic graph G = ( ...

  6. xshell+xftp将项目部署到远程服务器上

    Xshell 简介: Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议. Xshell 通过互联网到远程主机的 ...

  7. Horizon公司环境

  8. Qt error C2338: No Q_OBJECT in the class with the signal错误解决办法(无法编译过信号与槽)

    由于没有继承QObject类而引起的 只需继承QObject类即可 如果已经继承了QObject类,编译还出现错误 将QObject类放在最前面继承:public QObject 最后即可编译通过

  9. mycat(读写分离、负载均衡、主从切换)

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 1.环境准备 1.1新增两台虚拟机 mycat01:192.168.247.81 mycat02:192.168.247 ...

  10. 识别ios系统设备并获取版本号

    let isIOS = userAgent.toLowerCase().indexOf("like mac os x") > 0; //ios终端 if (isIOS) { ...