当前位置:   article > 正文

【python】制作一个串口工具(上)!_python串口界面编程

python串口界面编程

      串口叫做串行接口,也称串行通信接口,按电气标准及协议来分包括RS-232-C、RS-422、RS485、USB等。 RS-232-C、RS-422与RS-485标准只对接口的电气特性做出规定,不涉及接插件、电缆或协议。USB是近几年发展起来的新型接口标准,主要应用于高速数据传输领域。

      工作中,经常要用到串口来做数据的读写,今天我们来自己做一个串口工具,这一节,我们先把基础的框架先搭建好。

一.环境配置

1.这边我就直接使用的 Qt Designer 来设计串口界面的布局。

(1)先来制作我们串口的端口选择,以及波特率,串口的开关等:

这边用到了groupBox、label、comboBox、pushButton几个控件。

(2)接下来制作我们的串口高级设置部分:

(3)然后就是串口数据发送部分:

 这边做了两种,ASCII、HEX类型。

(4)包括数据发送、接收文本框:

 (6)工具栏制作:

包括了,文件、设置、帮助、退出四个功能。

(7)最终布局如下:

2.生成对应的 .py 文件

附源码:

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'Serial_.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.7
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again. Do not edit this file unless you know what you are doing.
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. class Ui_MainWindow(object):
  10. def setupUi(self, MainWindow):
  11. MainWindow.setObjectName("MainWindow")
  12. MainWindow.resize(914, 672)
  13. self.centralwidget = QtWidgets.QWidget(MainWindow)
  14. self.centralwidget.setObjectName("centralwidget")
  15. self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
  16. self.groupBox.setGeometry(QtCore.QRect(20, 30, 321, 161))
  17. self.groupBox.setObjectName("groupBox")
  18. self.comboBox = QtWidgets.QComboBox(self.groupBox)
  19. self.comboBox.setGeometry(QtCore.QRect(130, 30, 161, 22))
  20. self.comboBox.setObjectName("comboBox")
  21. self.comboBox.addItem("")
  22. self.label_23 = QtWidgets.QLabel(self.groupBox)
  23. self.label_23.setGeometry(QtCore.QRect(10, 30, 91, 21))
  24. self.label_23.setStyleSheet("background-color: rgb(85, 170, 255);")
  25. self.label_23.setAlignment(QtCore.Qt.AlignCenter)
  26. self.label_23.setObjectName("label_23")
  27. self.label_24 = QtWidgets.QLabel(self.groupBox)
  28. self.label_24.setGeometry(QtCore.QRect(10, 70, 91, 21))
  29. self.label_24.setStyleSheet("background-color: rgb(85, 170, 255);")
  30. self.label_24.setAlignment(QtCore.Qt.AlignCenter)
  31. self.label_24.setObjectName("label_24")
  32. self.comboBox_3 = QtWidgets.QComboBox(self.groupBox)
  33. self.comboBox_3.setGeometry(QtCore.QRect(130, 70, 161, 22))
  34. self.comboBox_3.setObjectName("comboBox_3")
  35. self.comboBox_3.addItem("")
  36. self.comboBox_3.addItem("")
  37. self.comboBox_3.addItem("")
  38. self.comboBox_3.addItem("")
  39. self.comboBox_3.addItem("")
  40. self.pushButton_2 = QtWidgets.QPushButton(self.groupBox)
  41. self.pushButton_2.setGeometry(QtCore.QRect(90, 120, 121, 31))
  42. self.pushButton_2.setObjectName("pushButton_2")
  43. self.groupBox_2 = QtWidgets.QGroupBox(self.centralwidget)
  44. self.groupBox_2.setGeometry(QtCore.QRect(20, 200, 321, 291))
  45. self.groupBox_2.setObjectName("groupBox_2")
  46. self.comboBox_4 = QtWidgets.QComboBox(self.groupBox_2)
  47. self.comboBox_4.setGeometry(QtCore.QRect(230, 30, 69, 22))
  48. self.comboBox_4.setObjectName("comboBox_4")
  49. self.comboBox_4.addItem("")
  50. self.comboBox_4.addItem("")
  51. self.comboBox_4.addItem("")
  52. self.comboBox_4.addItem("")
  53. self.label_25 = QtWidgets.QLabel(self.groupBox_2)
  54. self.label_25.setGeometry(QtCore.QRect(10, 30, 91, 21))
  55. self.label_25.setStyleSheet("background-color: rgb(85, 170, 255);")
  56. self.label_25.setAlignment(QtCore.Qt.AlignCenter)
  57. self.label_25.setObjectName("label_25")
  58. self.label_26 = QtWidgets.QLabel(self.groupBox_2)
  59. self.label_26.setGeometry(QtCore.QRect(10, 70, 91, 21))
  60. self.label_26.setStyleSheet("background-color: rgb(85, 170, 255);")
  61. self.label_26.setAlignment(QtCore.Qt.AlignCenter)
  62. self.label_26.setObjectName("label_26")
  63. self.comboBox_5 = QtWidgets.QComboBox(self.groupBox_2)
  64. self.comboBox_5.setGeometry(QtCore.QRect(230, 70, 69, 22))
  65. self.comboBox_5.setObjectName("comboBox_5")
  66. self.comboBox_5.addItem("")
  67. self.comboBox_5.addItem("")
  68. self.label_27 = QtWidgets.QLabel(self.groupBox_2)
  69. self.label_27.setGeometry(QtCore.QRect(10, 110, 91, 21))
  70. self.label_27.setStyleSheet("background-color: rgb(85, 170, 255);")
  71. self.label_27.setAlignment(QtCore.Qt.AlignCenter)
  72. self.label_27.setObjectName("label_27")
  73. self.comboBox_6 = QtWidgets.QComboBox(self.groupBox_2)
  74. self.comboBox_6.setGeometry(QtCore.QRect(230, 110, 69, 22))
  75. self.comboBox_6.setObjectName("comboBox_6")
  76. self.comboBox_6.addItem("")
  77. self.comboBox_6.addItem("")
  78. self.comboBox_6.addItem("")
  79. self.comboBox_6.addItem("")
  80. self.comboBox_6.addItem("")
  81. self.label_28 = QtWidgets.QLabel(self.groupBox_2)
  82. self.label_28.setGeometry(QtCore.QRect(10, 150, 91, 21))
  83. self.label_28.setStyleSheet("background-color: rgb(85, 170, 255);")
  84. self.label_28.setAlignment(QtCore.Qt.AlignCenter)
  85. self.label_28.setObjectName("label_28")
  86. self.comboBox_7 = QtWidgets.QComboBox(self.groupBox_2)
  87. self.comboBox_7.setGeometry(QtCore.QRect(230, 150, 81, 22))
  88. self.comboBox_7.setObjectName("comboBox_7")
  89. self.comboBox_7.addItem("")
  90. self.comboBox_7.addItem("")
  91. self.comboBox_7.addItem("")
  92. self.comboBox_7.addItem("")
  93. self.label_29 = QtWidgets.QLabel(self.groupBox_2)
  94. self.label_29.setGeometry(QtCore.QRect(10, 190, 201, 21))
  95. self.label_29.setStyleSheet("background-color: rgb(85, 170, 255);")
  96. self.label_29.setAlignment(QtCore.Qt.AlignCenter)
  97. self.label_29.setObjectName("label_29")
  98. self.comboBox_8 = QtWidgets.QComboBox(self.groupBox_2)
  99. self.comboBox_8.setGeometry(QtCore.QRect(230, 190, 81, 22))
  100. self.comboBox_8.setObjectName("comboBox_8")
  101. self.comboBox_8.addItem("")
  102. self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
  103. self.pushButton.setGeometry(QtCore.QRect(50, 230, 201, 31))
  104. self.pushButton.setObjectName("pushButton")
  105. self.label_30 = QtWidgets.QLabel(self.groupBox_2)
  106. self.label_30.setGeometry(QtCore.QRect(270, 230, 31, 31))
  107. self.label_30.setStyleSheet("border-image: url(:/BACK/107zi.jpg);")
  108. self.label_30.setText("")
  109. self.label_30.setAlignment(QtCore.Qt.AlignCenter)
  110. self.label_30.setObjectName("label_30")
  111. self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
  112. self.textBrowser.setGeometry(QtCore.QRect(380, 30, 521, 341))
  113. self.textBrowser.setObjectName("textBrowser")
  114. self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
  115. self.groupBox_3.setGeometry(QtCore.QRect(20, 500, 321, 91))
  116. self.groupBox_3.setObjectName("groupBox_3")
  117. self.radioButton = QtWidgets.QRadioButton(self.groupBox_3)
  118. self.radioButton.setGeometry(QtCore.QRect(20, 20, 89, 16))
  119. self.radioButton.setObjectName("radioButton")
  120. self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_3)
  121. self.radioButton_2.setGeometry(QtCore.QRect(160, 20, 89, 16))
  122. self.radioButton_2.setObjectName("radioButton_2")
  123. self.pushButton_3 = QtWidgets.QPushButton(self.groupBox_3)
  124. self.pushButton_3.setGeometry(QtCore.QRect(30, 50, 75, 23))
  125. self.pushButton_3.setObjectName("pushButton_3")
  126. self.pushButton_4 = QtWidgets.QPushButton(self.groupBox_3)
  127. self.pushButton_4.setGeometry(QtCore.QRect(160, 50, 75, 23))
  128. self.pushButton_4.setObjectName("pushButton_4")
  129. self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
  130. self.lineEdit.setGeometry(QtCore.QRect(380, 390, 521, 201))
  131. self.lineEdit.setObjectName("lineEdit")
  132. MainWindow.setCentralWidget(self.centralwidget)
  133. self.menubar = QtWidgets.QMenuBar(MainWindow)
  134. self.menubar.setGeometry(QtCore.QRect(0, 0, 914, 23))
  135. self.menubar.setObjectName("menubar")
  136. MainWindow.setMenuBar(self.menubar)
  137. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  138. self.statusbar.setObjectName("statusbar")
  139. MainWindow.setStatusBar(self.statusbar)
  140. self.toolBar = QtWidgets.QToolBar(MainWindow)
  141. self.toolBar.setObjectName("toolBar")
  142. MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
  143. self.action = QtWidgets.QAction(MainWindow)
  144. icon = QtGui.QIcon()
  145. icon.addPixmap(QtGui.QPixmap(":/BACK/Desktop/img/file.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  146. self.action.setIcon(icon)
  147. self.action.setObjectName("action")
  148. self.action_2 = QtWidgets.QAction(MainWindow)
  149. icon1 = QtGui.QIcon()
  150. icon1.addPixmap(QtGui.QPixmap(":/BACK/Desktop/img/set.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  151. self.action_2.setIcon(icon1)
  152. self.action_2.setObjectName("action_2")
  153. self.action_3 = QtWidgets.QAction(MainWindow)
  154. icon2 = QtGui.QIcon()
  155. icon2.addPixmap(QtGui.QPixmap(":/BACK/Desktop/img/help.jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  156. self.action_3.setIcon(icon2)
  157. self.action_3.setObjectName("action_3")
  158. self.action_4 = QtWidgets.QAction(MainWindow)
  159. icon3 = QtGui.QIcon()
  160. icon3.addPixmap(QtGui.QPixmap(":/BACK/Desktop/img/quit(1).jpg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  161. self.action_4.setIcon(icon3)
  162. self.action_4.setObjectName("action_4")
  163. self.toolBar.addAction(self.action)
  164. self.toolBar.addAction(self.action_2)
  165. self.toolBar.addAction(self.action_3)
  166. self.toolBar.addAction(self.action_4)
  167. self.retranslateUi(MainWindow)
  168. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  169. def retranslateUi(self, MainWindow):
  170. _translate = QtCore.QCoreApplication.translate
  171. MainWindow.setWindowTitle(_translate("MainWindow", "串口工具v1.0"))
  172. self.groupBox.setTitle(_translate("MainWindow", "Basic Serial settings"))
  173. self.comboBox.setItemText(0, _translate("MainWindow", "Choose at session start"))
  174. self.label_23.setText(_translate("MainWindow", "Serial port:"))
  175. self.label_24.setText(_translate("MainWindow", "Speed (bps):"))
  176. self.comboBox_3.setItemText(0, _translate("MainWindow", "115200"))
  177. self.comboBox_3.setItemText(1, _translate("MainWindow", "1200"))
  178. self.comboBox_3.setItemText(2, _translate("MainWindow", "2400"))
  179. self.comboBox_3.setItemText(3, _translate("MainWindow", "9600"))
  180. self.comboBox_3.setItemText(4, _translate("MainWindow", "新建项目"))
  181. self.pushButton_2.setText(_translate("MainWindow", "Open Serial"))
  182. self.groupBox_2.setTitle(_translate("MainWindow", "Advanced Serial settings"))
  183. self.comboBox_4.setItemText(0, _translate("MainWindow", "8"))
  184. self.comboBox_4.setItemText(1, _translate("MainWindow", "7"))
  185. self.comboBox_4.setItemText(2, _translate("MainWindow", "6"))
  186. self.comboBox_4.setItemText(3, _translate("MainWindow", "5"))
  187. self.label_25.setText(_translate("MainWindow", "Data bits:"))
  188. self.label_26.setText(_translate("MainWindow", "Stop bits:"))
  189. self.comboBox_5.setItemText(0, _translate("MainWindow", "1"))
  190. self.comboBox_5.setItemText(1, _translate("MainWindow", "2"))
  191. self.label_27.setText(_translate("MainWindow", "Parity:"))
  192. self.comboBox_6.setItemText(0, _translate("MainWindow", "None"))
  193. self.comboBox_6.setItemText(1, _translate("MainWindow", "Odd"))
  194. self.comboBox_6.setItemText(2, _translate("MainWindow", "Even"))
  195. self.comboBox_6.setItemText(3, _translate("MainWindow", "Mark"))
  196. self.comboBox_6.setItemText(4, _translate("MainWindow", "Space"))
  197. self.label_28.setText(_translate("MainWindow", "Flow control:"))
  198. self.comboBox_7.setItemText(0, _translate("MainWindow", "Xon/Xoff"))
  199. self.comboBox_7.setItemText(1, _translate("MainWindow", "None"))
  200. self.comboBox_7.setItemText(2, _translate("MainWindow", "Dsr/Dtr"))
  201. self.comboBox_7.setItemText(3, _translate("MainWindow", "Rts/Cts"))
  202. self.label_29.setText(_translate("MainWindow", "execute macro as session start:"))
  203. self.comboBox_8.setItemText(0, _translate("MainWindow", "None"))
  204. self.pushButton.setText(_translate("MainWindow", "Reset defaults"))
  205. self.groupBox_3.setTitle(_translate("MainWindow", "Serial Send settings"))
  206. self.radioButton.setText(_translate("MainWindow", "ASCII"))
  207. self.radioButton_2.setText(_translate("MainWindow", "HEX"))
  208. self.pushButton_3.setText(_translate("MainWindow", "清除发送"))
  209. self.pushButton_4.setText(_translate("MainWindow", "发送数据"))
  210. self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
  211. self.action.setText(_translate("MainWindow", "文件"))
  212. self.action_2.setText(_translate("MainWindow", "设置"))
  213. self.action_3.setText(_translate("MainWindow", "帮助"))
  214. self.action_4.setText(_translate("MainWindow", "退出"))
  215. import TUTU_rc

3.主文件代码如下:

  1. import os
  2. import sys
  3. from PyQt5.QtWidgets import QApplication, QMainWindow
  4. import time
  5. from PyQt5.QtCore import Qt
  6. import serial
  7. import serial.tools.list_ports as serials
  8. from PyQt5.QtGui import QIcon
  9. import Serial_
  10. if __name__ == '__main__':
  11. app = QApplication(sys.argv)
  12. MainWindow = QMainWindow()
  13. ui = Serial_.Ui_MainWindow()
  14. ui.setupUi(MainWindow)
  15. MainWindow.show()##显示
  16. sys.exit(app.exec_())##退出界面

二.总结

这一篇先说基础框架的制作,下一期来说说如何功能的实现。

下一篇:【python】制作一个串口工具(下)!_==PP的博客-CSDN博客

@Neng

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/764512
推荐阅读
相关标签
  

闽ICP备14008679号