187 lines
7.3 KiB
Python
187 lines
7.3 KiB
Python
![]() |
from PyQt5.QtGui import QColor, QBrush
|
|||
|
from PyQt5.QtWidgets import QApplication
|
|||
|
from PyQt5.QtWidgets import QMainWindow, QTableWidgetItem
|
|||
|
|
|||
|
|
|||
|
from LaserMethaneUI import Ui_MainWindow
|
|||
|
|
|||
|
|
|||
|
class UiMain(QMainWindow, Ui_MainWindow):
|
|||
|
def __init__(self):
|
|||
|
super().__init__()
|
|||
|
self.setupUi(self)
|
|||
|
self.quick_num = 99
|
|||
|
# 串口通道表格设置
|
|||
|
self.plainTextEditReceive.setMaximumBlockCount(5000) # 设置最大行数
|
|||
|
self.tableWidgetSerChannel.setRowCount(20)
|
|||
|
|
|||
|
# 建立表格解析并显示hex
|
|||
|
self.tableWidget.setRowCount(self.quick_num)
|
|||
|
for i in range(self.quick_num): # 从0到20
|
|||
|
item = QTableWidgetItem()
|
|||
|
item.setCheckState(0)
|
|||
|
self.tableWidget.setItem(i, 0, item)
|
|||
|
|
|||
|
def add_item_ser_channel(self, port_name):
|
|||
|
row_count = self.tableWidgetSerChannel.rowCount() # 获取表格的行数
|
|||
|
|
|||
|
# 检查 port_name 是否已经存在于表格中
|
|||
|
for i in range(row_count):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 1) # 假设 port_name 在第2列(索引为2)
|
|||
|
if item and item.text() == port_name:
|
|||
|
print(f"{port_name} 已经存在于表格中")
|
|||
|
return
|
|||
|
|
|||
|
# 找到第一个空白行
|
|||
|
for i in range(row_count):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 1) # 假设 port_name 在第三列(索引为2)
|
|||
|
if not item or not item.text():
|
|||
|
# 在第一个空白行插入 port_name
|
|||
|
self.tableWidgetSerChannel.setItem(i, 1, QTableWidgetItem(port_name))
|
|||
|
item = QTableWidgetItem()
|
|||
|
item.setCheckState(2) # 2 表示 Qt.Checked
|
|||
|
self.tableWidgetSerChannel.setItem(i, 0, item)
|
|||
|
green_brush = QBrush(QColor('green'))
|
|||
|
self.tableWidgetSerChannel.item(i, 0).setBackground(green_brush)
|
|||
|
print(f"{port_name} 已添加到表格中")
|
|||
|
return
|
|||
|
|
|||
|
# 如果没有空白行,则在表格末尾添加一行并插入 port_name
|
|||
|
self.tableWidgetSerChannel.insertRow(row_count)
|
|||
|
self.tableWidgetSerChannel.setItem(row_count, 1, QTableWidgetItem(port_name))
|
|||
|
item = QTableWidgetItem()
|
|||
|
item.setCheckState(2) # 2 表示 Qt.Checked
|
|||
|
self.tableWidgetSerChannel.setItem(row_count, 0, item)
|
|||
|
green_brush = QBrush(QColor('green'))
|
|||
|
self.tableWidgetSerChannel.item(row_count, 0).setBackground(green_brush)
|
|||
|
print(f"{port_name} 已添加到表格末尾")
|
|||
|
|
|||
|
# 自动调整列宽
|
|||
|
self.tableWidgetSerChannel.resizeColumnsToContents(1)
|
|||
|
|
|||
|
def delete_item_ser_channel(self, port_name):
|
|||
|
row = self.find_port_row(port_name)
|
|||
|
if row is not None:
|
|||
|
self.tableWidgetSerChannel.removeRow(row)
|
|||
|
print(f"{port_name} 已从表格中删除")
|
|||
|
else:
|
|||
|
print(f"{port_name} 不存在于表格中")
|
|||
|
|
|||
|
def find_port_row(self, port_name):
|
|||
|
"""查找 port_name 在表格中的行位置"""
|
|||
|
row_count = self.tableWidgetSerChannel.rowCount()
|
|||
|
for i in range(row_count):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 1) # 假设 port_name 在第2列(索引为1)
|
|||
|
if item and item.text() == port_name:
|
|||
|
return i
|
|||
|
return None
|
|||
|
|
|||
|
def find_selected_ports(self):
|
|||
|
|
|||
|
selected_name = []
|
|||
|
for i in range(self.tableWidgetSerChannel.rowCount()):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 0)
|
|||
|
if item and item.checkState() == 2:
|
|||
|
selected_name.append(self.tableWidgetSerChannel.item(i, 1).text())
|
|||
|
return selected_name
|
|||
|
|
|||
|
def select_ser_channel_all(self):
|
|||
|
for i in range(self.tableWidgetSerChannel.rowCount()):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 0)
|
|||
|
if item:
|
|||
|
item.setCheckState(2)
|
|||
|
|
|||
|
def select_ser_channel_none(self):
|
|||
|
for i in range(self.tableWidgetSerChannel.rowCount()):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 0)
|
|||
|
if item:
|
|||
|
item.setCheckState(0)
|
|||
|
|
|||
|
def clear_ser_channel(self):
|
|||
|
for i in range(self.tableWidgetSerChannel.rowCount()):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 0)
|
|||
|
if item:
|
|||
|
item.setCheckState(0)
|
|||
|
green_brush = QBrush(QColor(255, 255, 255))
|
|||
|
self.tableWidgetSerChannel.item(i, 0).setBackground(green_brush)
|
|||
|
self.tableWidgetSerChannel.setItem(i, 1, QTableWidgetItem(""))
|
|||
|
|
|||
|
def set_background_color(self, row, col, color):
|
|||
|
"""设置表格背景颜色"""
|
|||
|
item = self.tableWidgetSerChannel.item(row, col)
|
|||
|
self.tableWidgetSerChannel.setItem(row, col, item)
|
|||
|
brush = QColor(color)
|
|||
|
self.tableWidgetSerChannel.item(row, col).setBackground(brush)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
def update_table(self, port_name):
|
|||
|
# 更新串口通道表格
|
|||
|
row_count = self.tableWidgetSerChannel.rowCount()
|
|||
|
for i in range(row_count):
|
|||
|
item = self.tableWidgetSerChannel.item(i, 1)
|
|||
|
if item and item.text() == port_name:
|
|||
|
item.setBackground(QColor(0, 255, 0)) # 设置颜色
|
|||
|
break
|
|||
|
|
|||
|
def update_table_status(self, ind, status, color):
|
|||
|
"""更新表格单元格状态"""
|
|||
|
item = QTableWidgetItem(status)
|
|||
|
self.tableWidgetSerChannel.setItem(ind, 2, item) # 设置第三列(索引为2)的文本
|
|||
|
brush = QColor(color)
|
|||
|
self.tableWidgetSerChannel.item(ind, 2).setBackground(brush)
|
|||
|
|
|||
|
def reset_port_color(self, ind):
|
|||
|
"""重置表格颜色"""
|
|||
|
item = QTableWidgetItem('')
|
|||
|
self.tableWidgetSerChannel.setItem(ind, 2, item) # 设置第三列(索引为2)的文本
|
|||
|
item.setBackground(QColor(255, 255, 255))
|
|||
|
|
|||
|
|
|||
|
|
|||
|
def set_cursor_to_end(self):
|
|||
|
textCursor = self.plainTextEditReceive.textCursor()
|
|||
|
textCursor.movePosition(textCursor.End)
|
|||
|
self.plainTextEditReceive.setTextCursor(textCursor)
|
|||
|
|
|||
|
def disp_hex_receive(self, hex_str_input):
|
|||
|
length = self.tableWidget.rowCount()
|
|||
|
try:
|
|||
|
for i in range(length):
|
|||
|
if self.tableWidget.item(i, 0).checkState() == 2:
|
|||
|
start = int(self.tableWidget.item(i, 1).text())
|
|||
|
num = int(self.tableWidget.item(i, 2).text())
|
|||
|
scale = int(self.tableWidget.item(i, 3).text())
|
|||
|
hex_str_cut = hex_str_input[start * 2:(start + num) * 2]
|
|||
|
item = QTableWidgetItem(hex_str_cut)
|
|||
|
self.tableWidget.setItem(i, 4, item)
|
|||
|
value = int(hex_str_cut, 16) / scale
|
|||
|
item = QTableWidgetItem(str(value))
|
|||
|
self.tableWidget.setItem(i, 5, item)
|
|||
|
except Exception as e:
|
|||
|
print(e)
|
|||
|
pass
|
|||
|
|
|||
|
def set_disp_hex(self, row, col, str):
|
|||
|
self.tableWidget.setItem(row, col, QTableWidgetItem(str))
|
|||
|
|
|||
|
def get_disp_hex(self, row, col):
|
|||
|
return self.tableWidget.item(row, col).text()
|
|||
|
|
|||
|
def set_disp_select(self,row,status):
|
|||
|
item = self.tableWidget.item(row, 0) # 先反读回来,再设置,不然text丢失
|
|||
|
item.setCheckState(status)
|
|||
|
self.tableWidget.setItem(row, 0, item)
|
|||
|
|
|||
|
def get_disp_select(self,row):
|
|||
|
return self.tableWidget.item(row, 0).checkState()
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
import sys
|
|||
|
|
|||
|
app = QApplication(sys.argv)
|
|||
|
ui = UiMain()
|
|||
|
ui.show()
|
|||
|
sys.exit(app.exec_())
|