2025-03-14 16:15:51 +08:00

187 lines
7.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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_())