├── File
├── 1.jpg
├── MainWidget.py
├── __pycache__
│ ├── MainWidget.cpython-36.pyc
│ ├── browser_ui.cpython-36.pyc
│ └── main.cpython-36.pyc
├── browser_ui.py
├── browser_ui.ui
├── main.py
└── moveToThread.py
├── README.md
└── Serial
├── __pycache__
└── ui_demo_1.cpython-36.pyc
├── pyserial_demo.py
├── ui_demo_1.py
└── ui_demo_1.ui
/File/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wang-jiankun/Pyqt5-Project/0df80bb76cceb6372a3f870a6838cf9a055b94af/File/1.jpg
--------------------------------------------------------------------------------
/File/MainWidget.py:
--------------------------------------------------------------------------------
1 | from PyQt5.QtWidgets import QFileDialog, QWidget
2 | from PyQt5.QtGui import QImage, QPixmap
3 | from PyQt5.QtWidgets import QMessageBox
4 | from PyQt5.QtCore import QThread, pyqtSignal, Qt
5 | from browser_ui import Ui_Form
6 | import cv2
7 | import time
8 |
9 |
10 | class Browser(QWidget):
11 | # 初始化
12 | def __init__(self, parent=None):
13 | super(Browser, self).__init__(parent)
14 | self.ui = Ui_Form()
15 | self.ui.setupUi(self)
16 |
17 | self.ui.pb_browser.clicked.connect(self.slot_open_browser)
18 | self.ui.pb_open.clicked.connect(self.slot_openfile)
19 |
20 | # 打开文件浏览器槽函数
21 | def slot_open_browser(self):
22 | # 打开文件浏览器,获得选择的文件
23 | file_name = QFileDialog.getOpenFileName(self, '选择文件', '', 'Images (*.png *.xpm *.jpg *.avi *.mp4)')
24 | # print(file_name)
25 | # 判断是否选择了文件
26 | if file_name[0] != '':
27 | # print('open')
28 | # 显示文件名
29 | self.ui.lineEdit.setText(file_name[0])
30 | # 显示文件内容
31 | # with open(file_name[0], 'r') as f:
32 | # my_txt = f.read()
33 | # self.lineEdit.setPlainText(my_txt)
34 |
35 | # 打开文件槽函数
36 | def slot_openfile(self):
37 | # 获取文件名
38 | file_name = self.ui.lineEdit.text()
39 | if file_name == '':
40 | QMessageBox.information(self, 'empty error', '请选择文件')
41 | return
42 | temp = file_name.split('.')[-1]
43 | if temp == 'avi' or temp == 'mp4':
44 | self.th = Thread(file_name, self)
45 | self.th.show_signal.connect(self.show_image)
46 | self.th.start()
47 | # 如果th不不定义为类属性,需要下面这两句,程序运行播放视频才不会出错
48 | # self.image = QImage(file_name)
49 | # self.ui.lb_show.setPixmap(QPixmap.fromImage(self.image))
50 | return
51 |
52 | # img = cv2.imread(file_name)
53 | # cv2.imshow('photo', img)
54 | # 把图像转换为QT格式
55 | self.image = QImage(file_name)
56 | self.ui.lb_show.setPixmap(QPixmap.fromImage(self.image))
57 |
58 | def show_image(self, image):
59 | # 在label上显示图片
60 | self.ui.lb_show.setPixmap(QPixmap.fromImage(image))
61 | # 缩放窗
62 | # self.resize(self.image.width(), self.image.height())
63 |
64 |
65 | # 采用线程来播放视频
66 | class Thread(QThread):
67 | # 自定义信号
68 | show_signal = pyqtSignal(QImage)
69 |
70 | # 构造函数,接受参数
71 | def __init__(self, file_name, browser):
72 | QThread.__init__(self)
73 | self.video_name = file_name
74 | self.browser = browser
75 |
76 | # 重写run()方法
77 | def run(self):
78 | # 实例化一个读取视频对象
79 | cap = cv2.VideoCapture(self.video_name)
80 |
81 | while cap.isOpened():
82 | # 读取视频帧
83 | ret, frame = cap.read()
84 | # 获取视频的帧数
85 | fps = cap.get(cv2.CAP_PROP_FPS)
86 |
87 | if ret:
88 | # 转换图片格式
89 | rgb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
90 | qt_image = QImage(rgb_image.data, rgb_image.shape[1], rgb_image.shape[0], QImage.Format_RGB888)
91 | p = qt_image.scaled(640, 480, Qt.KeepAspectRatio)
92 | # 发射信号
93 | print('线程: %s' % hex(int(QThread.currentThreadId())))
94 | self.show_signal.emit(p)
95 | time.sleep(1/fps)
96 | else:
97 | image = QImage('E:/11.jpg')
98 | self.browser.ui.lb_show.setPixmap(QPixmap.fromImage(image))
99 | self.browser.ui.lb_show.adjustSize()
100 | print('播放结束')
101 | break
102 |
--------------------------------------------------------------------------------
/File/__pycache__/MainWidget.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wang-jiankun/Pyqt5-Project/0df80bb76cceb6372a3f870a6838cf9a055b94af/File/__pycache__/MainWidget.cpython-36.pyc
--------------------------------------------------------------------------------
/File/__pycache__/browser_ui.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wang-jiankun/Pyqt5-Project/0df80bb76cceb6372a3f870a6838cf9a055b94af/File/__pycache__/browser_ui.cpython-36.pyc
--------------------------------------------------------------------------------
/File/__pycache__/main.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wang-jiankun/Pyqt5-Project/0df80bb76cceb6372a3f870a6838cf9a055b94af/File/__pycache__/main.cpython-36.pyc
--------------------------------------------------------------------------------
/File/browser_ui.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'browser.ui'
4 | #
5 | # Created by: PyQt5 UI code generator 5.11.2
6 | #
7 | # WARNING! All changes made in this file will be lost!
8 |
9 | from PyQt5 import QtCore, QtGui, QtWidgets
10 |
11 | class Ui_Form(object):
12 | def setupUi(self, Form):
13 | Form.setObjectName("Form")
14 | Form.resize(518, 549)
15 | self.verticalLayout = QtWidgets.QVBoxLayout(Form)
16 | self.verticalLayout.setObjectName("verticalLayout")
17 | self.horizontalLayout = QtWidgets.QHBoxLayout()
18 | self.horizontalLayout.setObjectName("horizontalLayout")
19 | self.lineEdit = QtWidgets.QLineEdit(Form)
20 | self.lineEdit.setObjectName("lineEdit")
21 | self.horizontalLayout.addWidget(self.lineEdit)
22 | self.pb_browser = QtWidgets.QPushButton(Form)
23 | self.pb_browser.setObjectName("pb_browser")
24 | self.horizontalLayout.addWidget(self.pb_browser)
25 | self.pb_open = QtWidgets.QPushButton(Form)
26 | self.pb_open.setObjectName("pb_open")
27 | self.horizontalLayout.addWidget(self.pb_open)
28 | self.verticalLayout.addLayout(self.horizontalLayout)
29 | self.lb_show = QtWidgets.QLabel(Form)
30 | self.lb_show.setText("")
31 | self.lb_show.setPixmap(QtGui.QPixmap("1.jpg"))
32 | self.lb_show.setScaledContents(True)
33 | self.lb_show.setWordWrap(False)
34 | self.lb_show.setObjectName("lb_show")
35 | self.verticalLayout.addWidget(self.lb_show)
36 |
37 | self.retranslateUi(Form)
38 | QtCore.QMetaObject.connectSlotsByName(Form)
39 |
40 | def retranslateUi(self, Form):
41 | _translate = QtCore.QCoreApplication.translate
42 | Form.setWindowTitle(_translate("Form", "File browser"))
43 | self.pb_browser.setWhatsThis(_translate("Form", "
浏览文件
"))
44 | self.pb_browser.setText(_translate("Form", "浏览"))
45 | self.pb_open.setText(_translate("Form", "打开"))
46 |
47 |
--------------------------------------------------------------------------------
/File/browser_ui.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 518
10 | 549
11 |
12 |
13 |
14 | File browser
15 |
16 |
17 | -
18 |
19 |
-
20 |
21 |
22 | -
23 |
24 |
25 | <html><head/><body><p>浏览文件</p></body></html>
26 |
27 |
28 | 浏览
29 |
30 |
31 |
32 | -
33 |
34 |
35 | 打开
36 |
37 |
38 |
39 |
40 |
41 | -
42 |
43 |
44 |
45 |
46 |
47 | 1.jpg
48 |
49 |
50 | true
51 |
52 |
53 | false
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
--------------------------------------------------------------------------------
/File/main.py:
--------------------------------------------------------------------------------
1 | import sys
2 | from PyQt5 import sip
3 | from PyQt5.QtWidgets import QApplication
4 | from PyQt5.QtCore import QThread
5 | from MainWidget import Browser
6 |
7 | app = QApplication(sys.argv)
8 | print('主线程: %s' % hex(int(QThread.currentThreadId())))
9 | my_window = Browser()
10 | my_window.show()
11 | sys.exit(app.exec_())
12 |
--------------------------------------------------------------------------------
/File/moveToThread.py:
--------------------------------------------------------------------------------
1 | from PyQt5.QtCore import QThread, QObject
2 |
3 |
4 | # 创建自己的类继承自QObject,并写一个工作函数
5 | class Worker(QObject):
6 | def __init__(self, parent=None):
7 | super(Worker, self).__init__(parent)
8 |
9 | def work(self):
10 | print('当前线程: %s' % hex(int(QThread.currentThreadId())))
11 |
12 |
13 | if __name__ == '__main__':
14 | import sys
15 | from PyQt5.QtWidgets import QApplication
16 |
17 | app = QApplication(sys.argv)
18 | # 查看当前线程id
19 | print('主线程: %s' % hex(int(QThread.currentThreadId())))
20 | # 实例化线程对象
21 | t = QThread()
22 | # 实例化工作类对象
23 | worker = Worker()
24 | # 工作类对象转化为线程对象
25 | worker.moveToThread(t)
26 | # 绑定线程启动信号的槽函数
27 | t.started.connect(worker.work)
28 | # 启动线程
29 | t.start()
30 |
31 | app.exec_()
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Pyqt5-Project
2 | 基于pyqt5的一些小项目实践
3 |
4 | 一、串口通讯助手
5 | 文件夹:Serial
6 | 内容:
7 | pyserial_demo.py:程序功能代码
8 | ui_demo_1.py:界面代码
9 | ui_demo_1.ui:界面设计
10 |
11 | 二、图片和视频浏览器
12 | 文件夹:File
13 | 内容:
14 | main.py:程序主循环代码
15 | MainWidget.py:窗口类设计
16 | browser_ui.py:界面代码
17 | browser_ui.py:界面设计
18 | 1.jpg:图片资源
19 | moveToThread.py:另一种实现多线程的方法
20 |
--------------------------------------------------------------------------------
/Serial/__pycache__/ui_demo_1.cpython-36.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wang-jiankun/Pyqt5-Project/0df80bb76cceb6372a3f870a6838cf9a055b94af/Serial/__pycache__/ui_demo_1.cpython-36.pyc
--------------------------------------------------------------------------------
/Serial/pyserial_demo.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import serial
3 | import serial.tools.list_ports
4 | from PyQt5 import QtWidgets
5 | from PyQt5.QtWidgets import QMessageBox
6 | from PyQt5.QtCore import QTimer
7 | from Serial.ui_demo_1 import Ui_Form
8 |
9 |
10 | class Serial(QtWidgets.QWidget, Ui_Form):
11 | def __init__(self):
12 | super(Serial, self).__init__()
13 | self.setupUi(self)
14 | self.init()
15 | self.setWindowTitle("串口助手")
16 | self.ser = serial.Serial()
17 | self.port_check()
18 |
19 | # 接收数据和发送数据数目置零
20 | self.data_num_received = 0
21 | self.lineEdit.setText(str(self.data_num_received))
22 | self.data_num_sended = 0
23 | self.lineEdit_2.setText(str(self.data_num_sended))
24 |
25 | def init(self):
26 | # 串口检测按钮
27 | self.s1__box_1.clicked.connect(self.port_check)
28 |
29 | # 串口信息显示
30 | self.s1__box_2.currentTextChanged.connect(self.port_imf)
31 |
32 | # 打开串口按钮
33 | self.open_button.clicked.connect(self.port_open)
34 |
35 | # 关闭串口按钮
36 | self.close_button.clicked.connect(self.port_close)
37 |
38 | # 发送数据按钮
39 | self.s3__send_button.clicked.connect(self.data_send)
40 |
41 | # 定时发送数据
42 | self.timer_send = QTimer()
43 | self.timer_send.timeout.connect(self.data_send)
44 | self.timer_send_cb.stateChanged.connect(self.data_send_timer)
45 |
46 | # 定时器接收数据
47 | self.timer = QTimer(self)
48 | self.timer.timeout.connect(self.data_receive)
49 |
50 | # 清除发送窗口
51 | self.s3__clear_button.clicked.connect(self.send_data_clear)
52 |
53 | # 清除接收窗口
54 | self.s2__clear_button.clicked.connect(self.receive_data_clear)
55 |
56 | # 串口检测
57 | def port_check(self):
58 | # 检测所有存在的串口,将信息存储在字典中
59 | self.Com_Dict = {}
60 | port_list = list(serial.tools.list_ports.comports())
61 | self.s1__box_2.clear()
62 | for port in port_list:
63 | self.Com_Dict["%s" % port[0]] = "%s" % port[1]
64 | self.s1__box_2.addItem(port[0])
65 | if len(self.Com_Dict) == 0:
66 | self.state_label.setText(" 无串口")
67 |
68 | # 串口信息
69 | def port_imf(self):
70 | # 显示选定的串口的详细信息
71 | imf_s = self.s1__box_2.currentText()
72 | if imf_s != "":
73 | self.state_label.setText(self.Com_Dict[self.s1__box_2.currentText()])
74 |
75 | # 打开串口
76 | def port_open(self):
77 | self.ser.port = self.s1__box_2.currentText()
78 | self.ser.baudrate = int(self.s1__box_3.currentText())
79 | self.ser.bytesize = int(self.s1__box_4.currentText())
80 | self.ser.stopbits = int(self.s1__box_6.currentText())
81 | self.ser.parity = self.s1__box_5.currentText()
82 |
83 | try:
84 | self.ser.open()
85 | except:
86 | QMessageBox.critical(self, "Port Error", "此串口不能被打开!")
87 | return None
88 |
89 | # 打开串口接收定时器,周期为2ms
90 | self.timer.start(2)
91 |
92 | if self.ser.isOpen():
93 | self.open_button.setEnabled(False)
94 | self.close_button.setEnabled(True)
95 | self.formGroupBox1.setTitle("串口状态(已开启)")
96 |
97 | # 关闭串口
98 | def port_close(self):
99 | self.timer.stop()
100 | self.timer_send.stop()
101 | try:
102 | self.ser.close()
103 | except:
104 | pass
105 | self.open_button.setEnabled(True)
106 | self.close_button.setEnabled(False)
107 | self.lineEdit_3.setEnabled(True)
108 | # 接收数据和发送数据数目置零
109 | self.data_num_received = 0
110 | self.lineEdit.setText(str(self.data_num_received))
111 | self.data_num_sended = 0
112 | self.lineEdit_2.setText(str(self.data_num_sended))
113 | self.formGroupBox1.setTitle("串口状态(已关闭)")
114 |
115 | # 发送数据
116 | def data_send(self):
117 | if self.ser.isOpen():
118 | input_s = self.s3__send_text.toPlainText()
119 | if input_s != "":
120 | # 非空字符串
121 | if self.hex_send.isChecked():
122 | # hex发送
123 | input_s = input_s.strip()
124 | send_list = []
125 | while input_s != '':
126 | try:
127 | num = int(input_s[0:2], 16)
128 | except ValueError:
129 | QMessageBox.critical(self, 'wrong data', '请输入十六进制数据,以空格分开!')
130 | return None
131 | input_s = input_s[2:].strip()
132 | send_list.append(num)
133 | input_s = bytes(send_list)
134 | else:
135 | # ascii发送
136 | input_s = (input_s + '\r\n').encode('utf-8')
137 |
138 | num = self.ser.write(input_s)
139 | self.data_num_sended += num
140 | self.lineEdit_2.setText(str(self.data_num_sended))
141 | else:
142 | pass
143 |
144 | # 接收数据
145 | def data_receive(self):
146 | try:
147 | num = self.ser.inWaiting()
148 | except:
149 | self.port_close()
150 | return None
151 | if num > 0:
152 | data = self.ser.read(num)
153 | num = len(data)
154 | # hex显示
155 | if self.hex_receive.checkState():
156 | out_s = ''
157 | for i in range(0, len(data)):
158 | out_s = out_s + '{:02X}'.format(data[i]) + ' '
159 | self.s2__receive_text.insertPlainText(out_s)
160 | else:
161 | # 串口接收到的字符串为b'123',要转化成unicode字符串才能输出到窗口中去
162 | self.s2__receive_text.insertPlainText(data.decode('iso-8859-1'))
163 |
164 | # 统计接收字符的数量
165 | self.data_num_received += num
166 | self.lineEdit.setText(str(self.data_num_received))
167 |
168 | # 获取到text光标
169 | textCursor = self.s2__receive_text.textCursor()
170 | # 滚动到底部
171 | textCursor.movePosition(textCursor.End)
172 | # 设置光标到text中去
173 | self.s2__receive_text.setTextCursor(textCursor)
174 | else:
175 | pass
176 |
177 | # 定时发送数据
178 | def data_send_timer(self):
179 | if self.timer_send_cb.isChecked():
180 | self.timer_send.start(int(self.lineEdit_3.text()))
181 | self.lineEdit_3.setEnabled(False)
182 | else:
183 | self.timer_send.stop()
184 | self.lineEdit_3.setEnabled(True)
185 |
186 | # 清除显示
187 | def send_data_clear(self):
188 | self.s3__send_text.setText("")
189 |
190 | def receive_data_clear(self):
191 | self.s2__receive_text.setText("")
192 |
193 |
194 | if __name__ == '__main__':
195 | app = QtWidgets.QApplication(sys.argv)
196 | myshow = Serial()
197 | myshow.show()
198 | sys.exit(app.exec_())
199 |
--------------------------------------------------------------------------------
/Serial/ui_demo_1.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | # Form implementation generated from reading ui file 'demo_1.ui'
4 | #
5 | # Created by: PyQt5 UI code generator 5.6
6 | #
7 | # WARNING! All changes made in this file will be lost!
8 |
9 | from PyQt5 import QtCore, QtGui, QtWidgets
10 |
11 | class Ui_Form(object):
12 | def setupUi(self, Form):
13 | Form.setObjectName("Form")
14 | Form.resize(707, 458)
15 | self.formGroupBox = QtWidgets.QGroupBox(Form)
16 | self.formGroupBox.setGeometry(QtCore.QRect(20, 20, 167, 301))
17 | self.formGroupBox.setObjectName("formGroupBox")
18 | self.formLayout = QtWidgets.QFormLayout(self.formGroupBox)
19 | self.formLayout.setContentsMargins(10, 10, 10, 10)
20 | self.formLayout.setSpacing(10)
21 | self.formLayout.setObjectName("formLayout")
22 | self.s1__lb_1 = QtWidgets.QLabel(self.formGroupBox)
23 | self.s1__lb_1.setObjectName("s1__lb_1")
24 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.s1__lb_1)
25 | self.s1__box_1 = QtWidgets.QPushButton(self.formGroupBox)
26 | self.s1__box_1.setAutoRepeatInterval(100)
27 | self.s1__box_1.setDefault(True)
28 | self.s1__box_1.setObjectName("s1__box_1")
29 | self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.s1__box_1)
30 | self.s1__lb_2 = QtWidgets.QLabel(self.formGroupBox)
31 | self.s1__lb_2.setObjectName("s1__lb_2")
32 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.s1__lb_2)
33 | self.s1__box_2 = QtWidgets.QComboBox(self.formGroupBox)
34 | self.s1__box_2.setObjectName("s1__box_2")
35 | self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.s1__box_2)
36 | self.s1__lb_3 = QtWidgets.QLabel(self.formGroupBox)
37 | self.s1__lb_3.setObjectName("s1__lb_3")
38 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.s1__lb_3)
39 | self.s1__box_3 = QtWidgets.QComboBox(self.formGroupBox)
40 | self.s1__box_3.setObjectName("s1__box_3")
41 | self.s1__box_3.addItem("")
42 | self.s1__box_3.addItem("")
43 | self.s1__box_3.addItem("")
44 | self.s1__box_3.addItem("")
45 | self.s1__box_3.addItem("")
46 | self.s1__box_3.addItem("")
47 | self.s1__box_3.addItem("")
48 | self.s1__box_3.addItem("")
49 | self.s1__box_3.addItem("")
50 | self.s1__box_3.addItem("")
51 | self.s1__box_3.addItem("")
52 | self.s1__box_3.addItem("")
53 | self.formLayout.setWidget(3, QtWidgets.QFormLayout.FieldRole, self.s1__box_3)
54 | self.s1__lb_4 = QtWidgets.QLabel(self.formGroupBox)
55 | self.s1__lb_4.setObjectName("s1__lb_4")
56 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.LabelRole, self.s1__lb_4)
57 | self.s1__box_4 = QtWidgets.QComboBox(self.formGroupBox)
58 | self.s1__box_4.setObjectName("s1__box_4")
59 | self.s1__box_4.addItem("")
60 | self.s1__box_4.addItem("")
61 | self.s1__box_4.addItem("")
62 | self.s1__box_4.addItem("")
63 | self.formLayout.setWidget(4, QtWidgets.QFormLayout.FieldRole, self.s1__box_4)
64 | self.s1__lb_5 = QtWidgets.QLabel(self.formGroupBox)
65 | self.s1__lb_5.setObjectName("s1__lb_5")
66 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.s1__lb_5)
67 | self.s1__box_5 = QtWidgets.QComboBox(self.formGroupBox)
68 | self.s1__box_5.setObjectName("s1__box_5")
69 | self.s1__box_5.addItem("")
70 | self.formLayout.setWidget(5, QtWidgets.QFormLayout.FieldRole, self.s1__box_5)
71 | self.open_button = QtWidgets.QPushButton(self.formGroupBox)
72 | self.open_button.setObjectName("open_button")
73 | self.formLayout.setWidget(7, QtWidgets.QFormLayout.SpanningRole, self.open_button)
74 | self.close_button = QtWidgets.QPushButton(self.formGroupBox)
75 | self.close_button.setObjectName("close_button")
76 | self.formLayout.setWidget(8, QtWidgets.QFormLayout.SpanningRole, self.close_button)
77 | self.s1__lb_6 = QtWidgets.QLabel(self.formGroupBox)
78 | self.s1__lb_6.setObjectName("s1__lb_6")
79 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.LabelRole, self.s1__lb_6)
80 | self.s1__box_6 = QtWidgets.QComboBox(self.formGroupBox)
81 | self.s1__box_6.setObjectName("s1__box_6")
82 | self.s1__box_6.addItem("")
83 | self.formLayout.setWidget(6, QtWidgets.QFormLayout.FieldRole, self.s1__box_6)
84 | self.state_label = QtWidgets.QLabel(self.formGroupBox)
85 | self.state_label.setText("")
86 | self.state_label.setTextFormat(QtCore.Qt.AutoText)
87 | self.state_label.setScaledContents(True)
88 | self.state_label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
89 | self.state_label.setObjectName("state_label")
90 | self.formLayout.setWidget(2, QtWidgets.QFormLayout.SpanningRole, self.state_label)
91 | self.verticalGroupBox = QtWidgets.QGroupBox(Form)
92 | self.verticalGroupBox.setGeometry(QtCore.QRect(210, 20, 401, 241))
93 | self.verticalGroupBox.setObjectName("verticalGroupBox")
94 | self.verticalLayout = QtWidgets.QVBoxLayout(self.verticalGroupBox)
95 | self.verticalLayout.setContentsMargins(10, 10, 10, 10)
96 | self.verticalLayout.setObjectName("verticalLayout")
97 | self.s2__receive_text = QtWidgets.QTextBrowser(self.verticalGroupBox)
98 | self.s2__receive_text.setObjectName("s2__receive_text")
99 | self.verticalLayout.addWidget(self.s2__receive_text)
100 | self.verticalGroupBox_2 = QtWidgets.QGroupBox(Form)
101 | self.verticalGroupBox_2.setGeometry(QtCore.QRect(210, 280, 401, 101))
102 | self.verticalGroupBox_2.setObjectName("verticalGroupBox_2")
103 | self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.verticalGroupBox_2)
104 | self.verticalLayout_2.setContentsMargins(10, 10, 10, 10)
105 | self.verticalLayout_2.setObjectName("verticalLayout_2")
106 | self.s3__send_text = QtWidgets.QTextEdit(self.verticalGroupBox_2)
107 | self.s3__send_text.setObjectName("s3__send_text")
108 | self.verticalLayout_2.addWidget(self.s3__send_text)
109 | self.s3__send_button = QtWidgets.QPushButton(Form)
110 | self.s3__send_button.setGeometry(QtCore.QRect(620, 310, 61, 31))
111 | self.s3__send_button.setObjectName("s3__send_button")
112 | self.s3__clear_button = QtWidgets.QPushButton(Form)
113 | self.s3__clear_button.setGeometry(QtCore.QRect(620, 350, 61, 31))
114 | self.s3__clear_button.setObjectName("s3__clear_button")
115 | self.formGroupBox1 = QtWidgets.QGroupBox(Form)
116 | self.formGroupBox1.setGeometry(QtCore.QRect(20, 340, 171, 101))
117 | self.formGroupBox1.setObjectName("formGroupBox1")
118 | self.formLayout_2 = QtWidgets.QFormLayout(self.formGroupBox1)
119 | self.formLayout_2.setContentsMargins(10, 10, 10, 10)
120 | self.formLayout_2.setSpacing(10)
121 | self.formLayout_2.setObjectName("formLayout_2")
122 | self.label = QtWidgets.QLabel(self.formGroupBox1)
123 | self.label.setObjectName("label")
124 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
125 | self.label_2 = QtWidgets.QLabel(self.formGroupBox1)
126 | self.label_2.setObjectName("label_2")
127 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
128 | self.lineEdit = QtWidgets.QLineEdit(self.formGroupBox1)
129 | self.lineEdit.setObjectName("lineEdit")
130 | self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
131 | self.lineEdit_2 = QtWidgets.QLineEdit(self.formGroupBox1)
132 | self.lineEdit_2.setObjectName("lineEdit_2")
133 | self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
134 | self.hex_send = QtWidgets.QCheckBox(Form)
135 | self.hex_send.setGeometry(QtCore.QRect(620, 280, 71, 16))
136 | self.hex_send.setObjectName("hex_send")
137 | self.hex_receive = QtWidgets.QCheckBox(Form)
138 | self.hex_receive.setGeometry(QtCore.QRect(620, 40, 71, 16))
139 | self.hex_receive.setObjectName("hex_receive")
140 | self.s2__clear_button = QtWidgets.QPushButton(Form)
141 | self.s2__clear_button.setGeometry(QtCore.QRect(620, 80, 61, 31))
142 | self.s2__clear_button.setObjectName("s2__clear_button")
143 | self.timer_send_cb = QtWidgets.QCheckBox(Form)
144 | self.timer_send_cb.setGeometry(QtCore.QRect(260, 390, 71, 16))
145 | self.timer_send_cb.setObjectName("timer_send_cb")
146 | self.lineEdit_3 = QtWidgets.QLineEdit(Form)
147 | self.lineEdit_3.setGeometry(QtCore.QRect(350, 390, 61, 20))
148 | self.lineEdit_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
149 | self.lineEdit_3.setObjectName("lineEdit_3")
150 | self.dw = QtWidgets.QLabel(Form)
151 | self.dw.setGeometry(QtCore.QRect(420, 390, 54, 20))
152 | self.dw.setObjectName("dw")
153 | self.verticalGroupBox.raise_()
154 | self.verticalGroupBox_2.raise_()
155 | self.formGroupBox.raise_()
156 | self.s3__send_button.raise_()
157 | self.s3__clear_button.raise_()
158 | self.formGroupBox.raise_()
159 | self.hex_send.raise_()
160 | self.hex_receive.raise_()
161 | self.s2__clear_button.raise_()
162 | self.timer_send_cb.raise_()
163 | self.lineEdit_3.raise_()
164 | self.dw.raise_()
165 |
166 | self.retranslateUi(Form)
167 | QtCore.QMetaObject.connectSlotsByName(Form)
168 |
169 | def retranslateUi(self, Form):
170 | _translate = QtCore.QCoreApplication.translate
171 | Form.setWindowTitle(_translate("Form", "Form"))
172 | self.formGroupBox.setTitle(_translate("Form", "串口设置"))
173 | self.s1__lb_1.setText(_translate("Form", "串口检测:"))
174 | self.s1__box_1.setText(_translate("Form", "检测串口"))
175 | self.s1__lb_2.setText(_translate("Form", "串口选择:"))
176 | self.s1__lb_3.setText(_translate("Form", "波特率:"))
177 | self.s1__box_3.setItemText(0, _translate("Form", "115200"))
178 | self.s1__box_3.setItemText(1, _translate("Form", "2400"))
179 | self.s1__box_3.setItemText(2, _translate("Form", "4800"))
180 | self.s1__box_3.setItemText(3, _translate("Form", "9600"))
181 | self.s1__box_3.setItemText(4, _translate("Form", "14400"))
182 | self.s1__box_3.setItemText(5, _translate("Form", "19200"))
183 | self.s1__box_3.setItemText(6, _translate("Form", "38400"))
184 | self.s1__box_3.setItemText(7, _translate("Form", "57600"))
185 | self.s1__box_3.setItemText(8, _translate("Form", "76800"))
186 | self.s1__box_3.setItemText(9, _translate("Form", "12800"))
187 | self.s1__box_3.setItemText(10, _translate("Form", "230400"))
188 | self.s1__box_3.setItemText(11, _translate("Form", "460800"))
189 | self.s1__lb_4.setText(_translate("Form", "数据位:"))
190 | self.s1__box_4.setItemText(0, _translate("Form", "8"))
191 | self.s1__box_4.setItemText(1, _translate("Form", "7"))
192 | self.s1__box_4.setItemText(2, _translate("Form", "6"))
193 | self.s1__box_4.setItemText(3, _translate("Form", "5"))
194 | self.s1__lb_5.setText(_translate("Form", "校验位:"))
195 | self.s1__box_5.setItemText(0, _translate("Form", "N"))
196 | self.open_button.setText(_translate("Form", "打开串口"))
197 | self.close_button.setText(_translate("Form", "关闭串口"))
198 | self.s1__lb_6.setText(_translate("Form", "停止位:"))
199 | self.s1__box_6.setItemText(0, _translate("Form", "1"))
200 | self.verticalGroupBox.setTitle(_translate("Form", "接受区"))
201 | self.verticalGroupBox_2.setTitle(_translate("Form", "发送区"))
202 | self.s3__send_text.setHtml(_translate("Form", "\n"
203 | "\n"
206 | "123456
"))
207 | self.s3__send_button.setText(_translate("Form", "发送"))
208 | self.s3__clear_button.setText(_translate("Form", "清除"))
209 | self.formGroupBox1.setTitle(_translate("Form", "串口状态"))
210 | self.label.setText(_translate("Form", "已接收:"))
211 | self.label_2.setText(_translate("Form", "已发送:"))
212 | self.hex_send.setText(_translate("Form", "Hex发送"))
213 | self.hex_receive.setText(_translate("Form", "Hex接收"))
214 | self.s2__clear_button.setText(_translate("Form", "清除"))
215 | self.timer_send_cb.setText(_translate("Form", "定时发送"))
216 | self.lineEdit_3.setText(_translate("Form", "1000"))
217 | self.dw.setText(_translate("Form", "ms/次"))
218 |
219 |
--------------------------------------------------------------------------------
/Serial/ui_demo_1.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 | Form
4 |
5 |
6 |
7 | 0
8 | 0
9 | 707
10 | 458
11 |
12 |
13 |
14 | Form
15 |
16 |
17 |
18 |
19 | 20
20 | 20
21 | 167
22 | 301
23 |
24 |
25 |
26 | 串口设置
27 |
28 |
29 |
30 | 10
31 |
32 |
33 | 10
34 |
35 |
36 | 10
37 |
38 |
39 | 10
40 |
41 |
42 | 10
43 |
44 |
45 | 10
46 |
47 | -
48 |
49 |
50 | 串口检测:
51 |
52 |
53 |
54 | -
55 |
56 |
57 | 检测串口
58 |
59 |
60 | 100
61 |
62 |
63 | true
64 |
65 |
66 |
67 | -
68 |
69 |
70 | 串口选择:
71 |
72 |
73 |
74 | -
75 |
76 |
77 | -
78 |
79 |
80 | 波特率:
81 |
82 |
83 |
84 | -
85 |
86 |
-
87 |
88 | 115200
89 |
90 |
91 | -
92 |
93 | 2400
94 |
95 |
96 | -
97 |
98 | 4800
99 |
100 |
101 | -
102 |
103 | 9600
104 |
105 |
106 | -
107 |
108 | 14400
109 |
110 |
111 | -
112 |
113 | 19200
114 |
115 |
116 | -
117 |
118 | 38400
119 |
120 |
121 | -
122 |
123 | 57600
124 |
125 |
126 | -
127 |
128 | 76800
129 |
130 |
131 | -
132 |
133 | 12800
134 |
135 |
136 | -
137 |
138 | 230400
139 |
140 |
141 | -
142 |
143 | 460800
144 |
145 |
146 |
147 |
148 | -
149 |
150 |
151 | 数据位:
152 |
153 |
154 |
155 | -
156 |
157 |
-
158 |
159 | 8
160 |
161 |
162 | -
163 |
164 | 7
165 |
166 |
167 | -
168 |
169 | 6
170 |
171 |
172 | -
173 |
174 | 5
175 |
176 |
177 |
178 |
179 | -
180 |
181 |
182 | 校验位:
183 |
184 |
185 |
186 | -
187 |
188 |
-
189 |
190 | N
191 |
192 |
193 |
194 |
195 | -
196 |
197 |
198 | 打开串口
199 |
200 |
201 |
202 | -
203 |
204 |
205 | 关闭串口
206 |
207 |
208 |
209 | -
210 |
211 |
212 | 停止位:
213 |
214 |
215 |
216 | -
217 |
218 |
-
219 |
220 | 1
221 |
222 |
223 |
224 |
225 | -
226 |
227 |
228 |
229 |
230 |
231 | Qt::AutoText
232 |
233 |
234 | true
235 |
236 |
237 | Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 | 210
247 | 20
248 | 401
249 | 241
250 |
251 |
252 |
253 | 接受区
254 |
255 |
256 |
257 | 10
258 |
259 |
260 | 10
261 |
262 |
263 | 10
264 |
265 |
266 | 10
267 |
268 | -
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 | 210
277 | 280
278 | 401
279 | 101
280 |
281 |
282 |
283 | 发送区
284 |
285 |
286 |
287 | 10
288 |
289 |
290 | 10
291 |
292 |
293 | 10
294 |
295 |
296 | 10
297 |
298 | -
299 |
300 |
301 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
302 | <html><head><meta name="qrichtext" content="1" /><style type="text/css">
303 | p, li { white-space: pre-wrap; }
304 | </style></head><body style=" font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;">
305 | <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">123456</p></body></html>
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 | 620
315 | 310
316 | 61
317 | 31
318 |
319 |
320 |
321 | 发送
322 |
323 |
324 |
325 |
326 |
327 | 620
328 | 350
329 | 61
330 | 31
331 |
332 |
333 |
334 | 清除
335 |
336 |
337 |
338 |
339 |
340 | 20
341 | 340
342 | 171
343 | 101
344 |
345 |
346 |
347 | 串口状态
348 |
349 |
350 |
351 | 10
352 |
353 |
354 | 10
355 |
356 |
357 | 10
358 |
359 |
360 | 10
361 |
362 |
363 | 10
364 |
365 |
366 | 10
367 |
368 | -
369 |
370 |
371 | 已接收:
372 |
373 |
374 |
375 | -
376 |
377 |
378 | 已发送:
379 |
380 |
381 |
382 | -
383 |
384 |
385 | -
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 | 620
394 | 280
395 | 71
396 | 16
397 |
398 |
399 |
400 | Hex发送
401 |
402 |
403 |
404 |
405 |
406 | 620
407 | 40
408 | 71
409 | 16
410 |
411 |
412 |
413 | Hex接收
414 |
415 |
416 |
417 |
418 |
419 | 620
420 | 80
421 | 61
422 | 31
423 |
424 |
425 |
426 | 清除
427 |
428 |
429 |
430 |
431 |
432 | 260
433 | 390
434 | 71
435 | 16
436 |
437 |
438 |
439 | 定时发送
440 |
441 |
442 |
443 |
444 |
445 | 350
446 | 390
447 | 61
448 | 20
449 |
450 |
451 |
452 | 1000
453 |
454 |
455 | Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter
456 |
457 |
458 |
459 |
460 |
461 | 420
462 | 390
463 | 54
464 | 20
465 |
466 |
467 |
468 | ms/次
469 |
470 |
471 | verticalGroupBox
472 | verticalGroupBox_2
473 | formGroupBox
474 | s3__send_button
475 | s3__clear_button
476 | formGroupBox
477 | hex_send
478 | hex_receive
479 | s2__clear_button
480 | timer_send_cb
481 | lineEdit_3
482 | dw
483 |
484 |
485 |
486 |
487 |
--------------------------------------------------------------------------------