pyqt5设计一个左边是员工信息,右边显示数字的界面,数字来源def get_data(): ser = serial.Serial('COM3', 9600) data = ser.readline() if data: # 将字符串按空格分割,并取第三个元素作为数值 value_str = data.decode().strip().split()[1] value = float(value_str) ser.close() return value
时间: 2023-12-10 15:42:57 浏览: 125
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
3星 · 编辑精心推荐
好的,我们可以使用PyQt5中的QSplitter控件来实现左右分割的效果。在左边的区域,我们可以使用QTableWidget来展示员工信息。在右边的区域,我们可以使用QLabel来显示数字。代码如下:
```python
import serial
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QSplitter, QTableWidget, QTableWidgetItem, QLabel
def get_data():
ser = serial.Serial('COM3', 9600)
data = ser.readline()
if data:
# 将字符串按空格分割,并取第三个元素作为数值
value_str = data.decode().strip().split()[1]
value = float(value_str)
ser.close()
return value
class EmployeeInfo(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建表格控件
tableWidget = QTableWidget()
tableWidget.setColumnCount(2)
tableWidget.setHorizontalHeaderLabels(['姓名', '工号'])
# 添加数据
data = [('张三', '001'), ('李四', '002'), ('王五', '003')]
for i in range(len(data)):
name = QTableWidgetItem(data[i][0])
id = QTableWidgetItem(data[i][1])
tableWidget.setItem(i, 0, name)
tableWidget.setItem(i, 1, id)
# 创建布局
layout = QVBoxLayout()
layout.addWidget(tableWidget)
self.setLayout(layout)
class NumberDisplay(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建标签控件
label = QLabel('0')
label.setAlignment(Qt.AlignCenter)
label.setStyleSheet('font-size: 100px;')
# 创建布局
layout = QVBoxLayout()
layout.addWidget(label)
self.setLayout(layout)
# 定时更新标签显示的数字
self.timer = QTimer()
self.timer.timeout.connect(self.update_number)
self.timer.start(1000)
def update_number(self):
value = get_data()
if value:
self.label.setText(str(value))
class MainWidget(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建左右分割控件
splitter = QSplitter(Qt.Horizontal)
# 添加左边的员工信息控件
employeeInfo = EmployeeInfo()
splitter.addWidget(employeeInfo)
# 添加右边的数字显示控件
numberDisplay = NumberDisplay()
splitter.addWidget(numberDisplay)
# 创建布局
layout = QVBoxLayout()
layout.addWidget(splitter)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication([])
mainWidget = MainWidget()
mainWidget.show()
app.exec_()
```
在这个例子中,我们定义了三个QWidget子类:EmployeeInfo、NumberDisplay和MainWidget。EmployeeInfo用于展示员工信息,NumberDisplay用于显示数字,MainWidget用于将两个控件放在一起。我们使用QSplitter来实现左右分割的效果,将两个子控件添加到QSplitter中即可。在NumberDisplay中,我们使用定时器来定时更新显示的数字。get_data函数用于从串口读取数据,并返回数值。注意,这个例子中涉及到串口的操作,需要先安装pyserial库。
阅读全文