update 更新表格设置

This commit is contained in:
FrankCV2048
2024-09-07 23:14:24 +08:00
parent 286fc0f595
commit 1dceb0cc77
8 changed files with 163 additions and 135 deletions

181
app.py
View File

@ -3,15 +3,18 @@ import json
import queue
import sys
from multiprocessing import Process
from PyQt5.uic.properties import QtWidgets
from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent
from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \
QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView
from datetime import datetime
import Constant
from CU.Command import FeedCommand
from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus
from Vision.camera_coordinate_dete import Detection
#from Vision.camera_coordinate_dete import Detection
from ui_untitled import Ui_MainWindow
from COM.COM_Robot import RobotClient
from Expection import Error_Code
@ -34,6 +37,7 @@ class MainWindow(QMainWindow,Ui_MainWindow):
self.init_Run()
self.init_robot_info()
self.init_FeedLine()
self.start_Runing()
@ -80,51 +84,21 @@ class MainWindow(QMainWindow,Ui_MainWindow):
# self.horizontalSlider_J1.sliderReleased
self.pushButton_startFeed.clicked.connect(self.send_startFeed_button_click)
self.pushButton_stack_feedSet.clicked.connect(self.send_stack_feedSet_button_click)
self.pushButton_stack_feedControl.clicked.connect(lambda _, index=0: self.send_stack_feedSet_button_click(index))
self.pushButton_stack_feedSet.clicked.connect(lambda _,index=1:self.send_stack_feedSet_button_click(index))
self.horizontalSlider_feedingNum.blockSignals(True)
self.horizontalSlider_feedingNum.setMinimum(0)
model = QStandardItemModel(4, 6, self) # 4行6列
# 设置第一层表头
model.setHorizontalHeaderLabels(['', '个人信息', '', '', '工作信息', ''])
# 设置第二层表头
itemA = QStandardItem("x")
itemA.setTextAlignment(Qt.AlignmentFlag.AlignCenter)
model.setItem(0, 0, itemA)
model.setItem(0, 1, QStandardItem("y"))
model.setItem(0, 2, QStandardItem("z"))
model.setItem(0, 3, QStandardItem("u"))
model.setItem(0, 4, QStandardItem("v"))
model.setItem(0, 5, QStandardItem("w"))
# 填充表格数据
data = [
["Alice", "25", "New York", "Developer", "ABC Corp", "$100,000"],
["Bob", "30", "Los Angeles", "Designer", "XYZ Ltd", "$90,000"],
["Charlie", "22", "Chicago", "Analyst", "MNO Inc", "$80,000"],
["David", "28", "Miami", "Manager", "PQR LLC", "$110,000"]
]
for row_idx, row_data in enumerate(data):
for col_idx, item in enumerate(row_data):
model.setItem(row_idx + 1, col_idx, QStandardItem(item))
# 合并单元格以创建多级表头效果
self.tableView_feedSeting.setSpan(0, 0, 1, 3) # "个人信息" 跨越三列
self.tableView_feedSeting.setSpan(0, 3, 1, 3) # "工作信息" 跨越三列
# 设置模型到表视图
self.tableView_feedSeting.setModel(model)
self.lineEdit_speed.hide()
def init_Run(self):
self.robotClient = None
self.configReader = configparser.ConfigParser()
self.detection = Detection()
self.detection = None# Detection()
self.command_position_quene = Queue()
self.status_address = DataAddress()
self.feedLine_dict = {}
@ -138,6 +112,7 @@ class MainWindow(QMainWindow,Ui_MainWindow):
self.robotClient = RobotClient(ip, port, self.command_position_quene, self.status_address)
self.feeding = Feeding(self.robotClient,self.detection) # 临时
self.last_time=time.time()
try:
self.robotClient.CreatConnect()
except:
@ -148,6 +123,71 @@ class MainWindow(QMainWindow,Ui_MainWindow):
else:
return Error_Code.SYS_NETERROR
def init_seting_frame(self):
rows = len(self.feedLine_dict.keys())+2
self.tableWidget_feedSeting.setRowCount(rows)
self.tableWidget_feedSeting.setColumnCount(19)
# 设置第一重表头的合并 (三列一组)
self.tableWidget_feedSeting.setSpan(0, 1, 1, 6) # 合并前3列
self.tableWidget_feedSeting.setSpan(0, 7, 1, 6) # 合并后3列
self.tableWidget_feedSeting.setSpan(0, 13, 1, 6) # 合并后3列
btn_safe = QPushButton("获取安全位置")
widget_safe = QWidget()
layout_safe = QHBoxLayout()
layout_safe.addWidget(btn_safe)
# 调整布局的间距,使之更紧凑
layout_safe.setContentsMargins(0, 0, 0, 0)
# 将布局设置到 QWidget 容器中
widget_safe.setLayout(layout_safe)
btn_photo = QPushButton("获取拍照位置")
widget_photo = QWidget()
layout_photo = QHBoxLayout()
layout_photo.addWidget(btn_photo)
# 调整布局的间距,使之更紧凑
layout_photo.setContentsMargins(0, 0, 0, 0)
# 将布局设置到 QWidget 容器中
widget_photo.setLayout(layout_photo)
btn_feed = QPushButton("获取投料位置")
widget_feed = QWidget()
layout_feed = QHBoxLayout()
layout_feed.addWidget(btn_feed)
# 调整布局的间距,使之更紧凑
layout_feed.setContentsMargins(0, 0, 0, 0)
# 将布局设置到 QWidget 容器中
widget_feed.setLayout(layout_feed)
btn_safe.clicked.connect(self.send_get_safe_position_button_click)
btn_photo.clicked.connect(self.send_get_photo_position_button_click)
btn_feed.clicked.connect(self.send_get_feed_position_button_click)
# 添加第一重表头项
self.tableWidget_feedSeting.setCellWidget(0, 1, widget_safe)
self.tableWidget_feedSeting.setCellWidget(0, 7, widget_photo)
self.tableWidget_feedSeting.setCellWidget(0, 13, widget_feed) # 设置在合并的第2组
self.tableWidget_feedSeting.setSelectionBehavior(QTableWidget.SelectRows)
self.tableWidget_feedSeting.setAutoScroll(True)
# 添加第二重表头
self.tableWidget_feedSeting.setHorizontalHeaderLabels(['header','X1','Y1','Z1','U1','V1','W1','X2','Y2','Z2','U2','V2','W2','X3','Y3','Z3','U3','V3','W3'])
self.tableWidget_feedSeting.hideColumn(0)
# 填充数据行
for row,(feed_line_key,feed_line)in enumerate(self.feedLine_dict.items()):
self.tableWidget_feedSeting.setItem(row+1, 0, QTableWidgetItem(feed_line_key))
self.set_position_to_tabel(row+1, 0, feed_line.safe_position)
self.set_position_to_tabel(row+1, 1, feed_line.photo_position)
self.set_position_to_tabel(row+1, 2, feed_line.feed_position)
# 禁用自动表头
self.tableWidget_feedSeting.verticalHeader().setVisible(True)
def init_FeedLine(self):
line_count = self.configReader.get('Robot_Feed', 'LineCount', fallback=0)
@ -158,30 +198,30 @@ class MainWindow(QMainWindow,Ui_MainWindow):
photo_position = Real_Position()
feed_position = Real_Position()
safe_position.X = int(self.configReader.get(line_str, 'SafePosition_x', fallback=0))
safe_position.Y = int(self.configReader.get(line_str, 'SafePosition_y', fallback=0))
safe_position.Z = int(self.configReader.get(line_str, 'SafePosition_z', fallback=0))
safe_position.U = int(self.configReader.get(line_str, 'SafePosition_u', fallback=0))
safe_position.V = int(self.configReader.get(line_str, 'SafePosition_v', fallback=0))
safe_position.W = int(self.configReader.get(line_str, 'SafePosition_w', fallback=0))
safe_position.X = float(self.configReader.get(line_str, 'SafePosition_x', fallback=0))
safe_position.Y = float(self.configReader.get(line_str, 'SafePosition_y', fallback=0))
safe_position.Z = float(self.configReader.get(line_str, 'SafePosition_z', fallback=0))
safe_position.U = float(self.configReader.get(line_str, 'SafePosition_u', fallback=0))
safe_position.V = float(self.configReader.get(line_str, 'SafePosition_v', fallback=0))
safe_position.W = float(self.configReader.get(line_str, 'SafePosition_w', fallback=0))
photo_position.X = int(self.configReader.get(line_str, 'PhotoPosition_x', fallback=0))
photo_position.Y = int(self.configReader.get(line_str, 'PhotoPosition_y', fallback=0))
photo_position.Z = int(self.configReader.get(line_str, 'PhotoPosition_z', fallback=0))
photo_position.U = int(self.configReader.get(line_str, 'PhotoPosition_u', fallback=0))
photo_position.V = int(self.configReader.get(line_str, 'PhotoPosition_v', fallback=0))
photo_position.W = int(self.configReader.get(line_str, 'PhotoPosition_w', fallback=0))
photo_position.X = float(self.configReader.get(line_str, 'PhotoPosition_x', fallback=0))
photo_position.Y = float(self.configReader.get(line_str, 'PhotoPosition_y', fallback=0))
photo_position.Z = float(self.configReader.get(line_str, 'PhotoPosition_z', fallback=0))
photo_position.U = float(self.configReader.get(line_str, 'PhotoPosition_u', fallback=0))
photo_position.V = float(self.configReader.get(line_str, 'PhotoPosition_v', fallback=0))
photo_position.W = float(self.configReader.get(line_str, 'PhotoPosition_w', fallback=0))
feed_position.X = int(self.configReader.get(line_str, 'FeedPosition_x', fallback=0))
feed_position.Y = int(self.configReader.get(line_str, 'FeedPosition_y', fallback=0))
feed_position.Z = int(self.configReader.get(line_str, 'FeedPosition_z', fallback=0))
feed_position.U = int(self.configReader.get(line_str, 'FeedPosition_u', fallback=0))
feed_position.V = int(self.configReader.get(line_str, 'FeedPosition_v', fallback=0))
feed_position.W = int(self.configReader.get(line_str, 'FeedPosition_w', fallback=0))
feed_position.X = float(self.configReader.get(line_str, 'FeedPosition_x', fallback=0))
feed_position.Y = float(self.configReader.get(line_str, 'FeedPosition_y', fallback=0))
feed_position.Z = float(self.configReader.get(line_str, 'FeedPosition_z', fallback=0))
feed_position.U = float(self.configReader.get(line_str, 'FeedPosition_u', fallback=0))
feed_position.V = float(self.configReader.get(line_str, 'FeedPosition_v', fallback=0))
feed_position.W = float(self.configReader.get(line_str, 'FeedPosition_w', fallback=0))
self.feedLine_dict[str(i+1)] = FeedLine(safe_position, photo_position, feed_position)
self.init_seting_frame()
pass
def init_robot_info(self):
@ -316,8 +356,8 @@ class MainWindow(QMainWindow,Ui_MainWindow):
self.horizontalSlider_feedingNum.setValue(0)
self.label_maxNum.setText(self.lineEdit_num.text())
def send_stack_feedSet_button_click(self):
self.stackedWidget_feed.setCurrentIndex(1)
def send_stack_feedSet_button_click(self,index):
self.stackedWidget_feed.setCurrentIndex(index)
@ -366,6 +406,25 @@ class MainWindow(QMainWindow,Ui_MainWindow):
print(request_command)
self.robotClient.add_sendQuene(request_command)
def send_get_safe_position_button_click(self):
real_position = self.robotClient.status_model.getRealPosition()
row_i = self.tableWidget_feedSeting.currentRow()
head = self.tableWidget_feedSeting.item(row_i, 0).text()
self.feedLine_dict[head].safe_position.init_position(real_position.X,real_position.Y,real_position.Z,real_position.U,real_position.V,real_position.W)
self.set_position_to_tabel(row_i,0,real_position)
def send_get_photo_position_button_click(self):
real_position = self.robotClient.status_model.getRealPosition()
row_i = self.tableWidget_feedSeting.currentRow()
head = self.tableWidget_feedSeting.item(row_i, 0).text()
self.feedLine_dict[head].photo_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W)
self.set_position_to_tabel(row_i, 1, real_position)
def send_get_feed_position_button_click(self):
real_position = self.robotClient.status_model.getRealPosition()
row_i = self.tableWidget_feedSeting.currentRow()
head = self.tableWidget_feedSeting.item(row_i, 0).text()
self.feedLine_dict[head].feed_position.init_position(real_position.X, real_position.Y, real_position.Z, real_position.U, real_position.V, real_position.W)
self.set_position_to_tabel(row_i, 2, real_position)
def run(self):
while True:
@ -417,7 +476,13 @@ class MainWindow(QMainWindow,Ui_MainWindow):
self.label_j5.setText(str(self.status_address.axis_4))
self.label_j6.setText(str(self.status_address.axis_5))
def set_position_to_tabel(self,row_i,position_j,real_Position:Real_Position):
self.tableWidget_feedSeting.setItem(row_i, position_j*6+1, QTableWidgetItem(str(real_Position.X)))
self.tableWidget_feedSeting.setItem(row_i, position_j*6+1+1, QTableWidgetItem(str(real_Position.Y)))
self.tableWidget_feedSeting.setItem(row_i, position_j*6+2+1, QTableWidgetItem(str(real_Position.Z)))
self.tableWidget_feedSeting.setItem(row_i, position_j*6+3+1, QTableWidgetItem(str(real_Position.U)))
self.tableWidget_feedSeting.setItem(row_i, position_j*6+4+1, QTableWidgetItem(str(real_Position.V)))
self.tableWidget_feedSeting.setItem(row_i, position_j*6+5+1, QTableWidgetItem(str(real_Position.W)))
def set_label_status_style(self, connected: bool):
if connected: