update 修改qss带来的异常退出

This commit is contained in:
FrankCV2048
2024-11-07 23:14:15 +08:00
parent 5df4e7cadb
commit c8c1db727c
9 changed files with 2355 additions and 152 deletions

View File

@ -24,16 +24,19 @@ class RobotClient(TCPClient):
self.time_delay_shake = time_delay_shake
def add_sendQuene(self,command): #后面 命令分等级,紧急命令直接执行
self.command_quene.put(command)
return
def send_Command(self):
try:
if self.command_quene.qsize()!=0:
command = self.command_quene.get()
self.client_socket.send(command.encode())
if True:
response = self.client_socket.recv(1024).decode('utf-8')
# response_message = json.loads(response)
return True
else:

View File

@ -13,6 +13,7 @@ from Model.RobotModel import CMDInstructRequest, MoveType
from Util.util_time import CRisOrFall
from Vision.camera_coordinate_dete import Detection
from Util.util_log import log
from Model.RobotModel import Instruction
class FeedStatus(IntEnum):
FNone = 0
@ -90,13 +91,14 @@ class Feeding :
if self.feedConfig == None:
self.feedStatus = FeedStatus.FNone
elif self.feedConfig.num == 0:
self.feedStatus = FeedStatus.FNone
if self.feedStatus == FeedStatus.FNone or self.pause:
return
elif self.feedStatus == FeedStatus.FStart:
log.log_message(logging.INFO, Constant.str_feed_start)
self.feedStatus = FeedStatus.FCheck
self.feedStatus = FeedStatus.FCheck if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
pass
elif self.feedStatus == FeedStatus.FCheck:
log.log_message(logging.INFO, Constant.str_feed_check)
@ -106,7 +108,7 @@ class Feeding :
# pass
# else:
if self.feedConfig.num != 0:
self.feedStatus = FeedStatus.FSafeP
self.feedStatus = FeedStatus.FSafeP if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
@ -114,7 +116,7 @@ class Feeding :
log.log_message(logging.INFO,Constant.str_feed_safe)
if self.feedConfig.feedLine.safe_position.compare(real_position):
self.error_photo_count=0
self.feedStatus = FeedStatus.FPhoto
self.feedStatus = FeedStatus.FPhoto if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
#self.sendTargPosition(self.feedConfig.feedLine.photo_position)
#判断是哪一个问题
@ -173,7 +175,7 @@ class Feeding :
else:
self.feedConfig.feedLine.take_position = detect_pos_list[max_z_index]
log.log_message(logging.INFO, Constant.str_feed_takePhoto_line)
self.feedStatus = FeedStatus.FTake
self.feedStatus = FeedStatus.FTake if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
self.sendTargPosition(self.feedConfig.feedLine.take_position)
except:
log.log_message(logging.ERROR, Constant.str_feed_takePhoto_fail)
@ -181,7 +183,7 @@ class Feeding :
else:
self.feedConfig.feedLine.take_position = self.feedConfig.feedLine.safe_position
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
self.feedStatus = FeedStatus.FTake
self.feedStatus = FeedStatus.FTake if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
log.log_message(logging.INFO, Constant.str_feed_takePhoto_move)
elif self.feedStatus == FeedStatus.FTake:
@ -193,15 +195,17 @@ class Feeding :
self.sendIOControl(self.robotClient.con_ios[2],1)
# TODO 检测是否通 不然报警
time.sleep(self.robotClient.time_delay_take)
self.feedStatus = FeedStatus.FSafeF
self.feedStatus = FeedStatus.FSafeF if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
log.log_message(logging.INFO, Constant.str_feed_take_success)
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
pass
elif self.feedStatus == FeedStatus.FSafeF:
log.log_message(logging.INFO, Constant.str_feed_mid)
log.log_message(logging.INFO, Constant.str_feed_safe)
if self.feedConfig.feedLine.safe_position.compare(real_position):
self.feedStatus = FeedStatus.FBroken
self.feedStatus = FeedStatus.FBroken if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
self.sendTargPosition(self.feedConfig.feedLine.broken1_position)
pass #吸嘴开始
@ -213,7 +217,9 @@ class Feeding :
# pass #破袋
elif self.feedStatus==FeedStatus.FBroken:
log.log_message(logging.INFO, Constant.str_feed_broken)
if self.feedConfig.feedLine.broken1_position.compare(real_position):
self.sendTargPosition(self.feedConfig.feedLine.broken2_position)
if self.feedConfig.feedLine.broken2_position.compare(real_position):
@ -221,7 +227,7 @@ class Feeding :
if self.feedConfig.feedLine.shake_position.compare(real_position): # 延迟判断如果最后点位延迟1s则认为阶段完成
# TODO 震动方案
time.sleep(self.robotClient.time_delay_shake)
self.feedStatus = FeedStatus.FDropBag
self.feedStatus = FeedStatus.FDropBag if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
elif self.feedStatus == FeedStatus.FDropBag:
@ -243,7 +249,7 @@ class Feeding :
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
self.init_detection_image()
else:
self.feedStatus = FeedStatus.FSafeP
self.feedStatus = FeedStatus.FSafeP if self.feedStatus != FeedStatus.FNone else FeedStatus.FNone
self.sendTargPosition(self.feedConfig.feedLine.safe_position)
@ -254,7 +260,7 @@ class Feeding :
self.sendIOControl(Constant.IO_EmergencyPoint, 0)
def sendIOControl(self,IO_bit,IO_Status:int):
from Model.RobotModel import Instruction
IO_command = CMDInstructRequest()
io_instruction = Instruction()
io_instruction.IO = True
@ -263,10 +269,10 @@ class Feeding :
IO_command.dsID = 'HCRemoteCommand'
IO_command.instructions.append(io_instruction)
self.robotClient.add_sendQuene(IO_command.toString())
log.log_message(logging.INFO, f'{Constant.str_feed_io_control}{IO_bit}{IO_Status}')
pass
def sendTargPosition(self,real_position,move_type:MoveType=MoveType.WORLD ,speed = Constant.speed):
from Model.RobotModel import Instruction
position_instruction = Instruction()
position_instruction.speed = speed
position_instruction.m0 = real_position.X
@ -279,7 +285,7 @@ class Feeding :
instruction_command = CMDInstructRequest()
instruction_command.instructions.append(position_instruction)
request_command = instruction_command.toString()
print(request_command)
log_str = f'移动到位置:{"姿势直线"}' \
f'X:{position_instruction.m0}-' \
@ -288,7 +294,12 @@ class Feeding :
f'U:{position_instruction.m3}-' \
f'V:{position_instruction.m4}-' \
f'W:{position_instruction.m5}'
log.log_message(logging.INFO, log_str)
try :
log.log_message(logging.INFO, log_str)
except:
print("error")
self.robotClient.add_sendQuene(request_command)
pass

View File

@ -49,6 +49,7 @@ str_feed_feed_num = '剩余投料次数:'
str_feed_zip_bag = '移动到压缩袋位置'
str_feed_photo_error_msgbox = '请重新摆放料带后再关闭此窗口'
str_feed_photo_confirm = '确认摆好'
str_feed_io_control = '发送IO控制: '
str_sys_start = '进入系统'
str_sys_exit = '退出系统'
str_sys_switch_tool = '切换到工具坐标'

View File

@ -996,7 +996,7 @@ font: 9pt "楷体";
border: 1px solid #dcdfe6;
border-radius: 5px;
}
*:pressed
*:disabled
{
background-color: #ff6e00;
}
@ -1017,9 +1017,18 @@ background-color: #ff6e00;
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 255, 255, 0);
<string notr="true">
QLabel:disabled{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: red;
}
QLabel{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color:#7A7A7A;</string>
color:#7A7A7A;
}</string>
</property>
<property name="text">
<string>取料中...</string>
@ -1039,12 +1048,12 @@ color:#7A7A7A;</string>
</property>
<property name="styleSheet">
<string notr="true">*{
background-color: rgb(255, 0, 0);
background-color: #7A7A7A;
font: 9pt &quot;楷体&quot;;
border: 1px solid #dcdfe6;
border-radius: 5px;
}
*:pressed
*:disabled
{
background-color: #ff6e00;
}
@ -1065,9 +1074,18 @@ background-color: #ff6e00;
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 255, 255, 0);
<string notr="true">
QLabel:disabled{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: red;
}
QLabel{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: red;</string>
color:#7A7A7A;
}</string>
</property>
<property name="text">
<string>拍照中...</string>
@ -1087,12 +1105,12 @@ color: red;</string>
</property>
<property name="styleSheet">
<string notr="true">*{
background-color: rgb(255, 0, 0);
background-color: #7A7A7A;
font: 9pt &quot;楷体&quot;;
border: 1px solid #dcdfe6;
border-radius: 5px;
}
*:pressed
*:disabled
{
background-color: #ff6e00;
}
@ -1113,9 +1131,18 @@ background-color: #ff6e00;
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 255, 255, 0);
<string notr="true">
QLabel:disabled{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: red;
}
QLabel{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: black;</string>
color:#7A7A7A;
}</string>
</property>
<property name="text">
<string>抓料中...</string>
@ -1135,12 +1162,12 @@ color: black;</string>
</property>
<property name="styleSheet">
<string notr="true">*{
background-color: rgb(255, 0, 0);
background-color: #7A7A7A;
font: 9pt &quot;楷体&quot;;
border: 1px solid #dcdfe6;
border-radius: 5px;
}
*:pressed
*:disabled
{
background-color: #ff6e00;
}
@ -1161,9 +1188,18 @@ background-color: #ff6e00;
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgba(255, 255, 255, 0);
<string notr="true">
QLabel:disabled{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: red;
}
QLabel{
background-color: rgba(255, 255, 255, 0);
font: 700 12pt &quot;Microsoft YaHei UI&quot;;
color: black;</string>
color:#7A7A7A;
}</string>
</property>
<property name="text">
<string>投料中...</string>
@ -1473,6 +1509,13 @@ font: 700 9pt &quot;Microsoft YaHei UI&quot;;</string>
border: 1px solid #A2EF4D; /* 设置边框颜色和宽度 */
qproperty-alignment: 'AlignCenter'; /* 设置文本居中 */
}
QLabel:disabled{
background-color: #FD3251;
color: #ffffff;
border-radius: 8px;
border: 1px solid #FD3251;
qproperty-alignment: 'AlignCenter';
}
</string>
</property>
<property name="text">
@ -5061,7 +5104,12 @@ color:#ffffff
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(255, 255, 255);</string>
<string notr="true">color: rgb(255, 255, 255);
border: 1px solid #dcdfe6;
font: 8pt &quot;Microsoft YaHei UI&quot;;</string>
</property>
<property name="placeholderText">
<string>自定义数量</string>
</property>
</widget>
</item>

File diff suppressed because it is too large Load Diff

View File

@ -47,13 +47,13 @@ photo_v5 = 0.0
photo_w5 = 1.0
linecount = 2
remain_linename = 1
remain_count = 0
remain_count = 477
solenoid_valve1_addr = 3
solenoid_valve2_addr = 2
solenoid_valve3_addr = 10
takedelay = 2
putdelay = 1
shakedelay = 1
takedelay = 0.2
putdelay = 0.1
shakedelay = 1.0
[Camera_Feed]
ipaddress = 127.0.0.1

View File

@ -36,24 +36,36 @@ class Logger:
text_edit_handler_warning.setFormatter(formatter_warning)
self.logger_textEdit_warning.addHandler(text_edit_handler_warning)
handler = TimedRotatingFileHandler(file_path, when="D", interval=1, backupCount=30)
handler = TimedRotatingFileHandler(file_path, when='D', interval=1, backupCount=30)
handler.suffix = "%Y-%m-%d"
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)
self.logger_file_info.addHandler(handler)
def log_message(self,level,message):
if message != self.pre_message:
self.pre_message = message
else:
return
if level == logging.INFO:
self.logger_textEdit_info.info(message)
self.logger_file_info.info(message)
if level == logging.ERROR:
self.logger_textEdit_info.error(message)
self.logger_file_info.error(message)
self.logger_textEdit_warning.error(message)
if level == logging.WARNING:
self.logger_file_info.warning(message)
try:
if message != self.pre_message:
self.pre_message = message
else:
return
if level == logging.INFO:
self.logger_textEdit_info.info(message)
self.logger_file_info.info(message)
if level == logging.ERROR:
self.logger_textEdit_info.error(message)
self.logger_file_info.error(message)
self.logger_textEdit_warning.error(message)
if level == logging.WARNING:
self.logger_file_info.warning(message)
except Exception as e:
print(e)

158
main.py
View File

@ -4,10 +4,10 @@ import logging
import queue
import sys
from multiprocessing import Process
import traceback
from PyQt5.uic.properties import QtWidgets
from PySide6 import QtCore
from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent
from PySide6.QtCore import QThread, Signal, Slot, QObject, QEvent, QTimer
from PySide6.QtGui import QIntValidator, QStandardItemModel, QStandardItem, Qt, QMovie, QIcon
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QLabel, QHeaderView, QTableWidget, \
QTableWidgetItem, QWidget, QHBoxLayout, QAbstractItemView, QMessageBox, QSizePolicy
@ -21,6 +21,7 @@ import Constant
from CU.Command import FeedCommand
from CU.Feeding import FeedLine, FeedingConfig, Feeding, FeedStatus
from Util.util_log import QTextEditLogger
from Util.util_time import CRisOrFall
from Vision.camera_coordinate_dete import Detection
from COM.COM_Robot import RobotClient
from Expection import Error_Code
@ -158,58 +159,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def init_qss(self):
self.active_status_Qss = """
background-color: #A2EF4D;
color: #ffffff;
border-radius: 8px;
border: 1px solid #A2EF4D;
qproperty-alignment: 'AlignCenter';
"""
self.noActive_status_Qss = """
background-color: #FD3251;
color: #ffffff;
border-radius: 8px;
border: 1px solid #FD3251;
qproperty-alignment: 'AlignCenter';
"""
self.active_label_sign_Qss = """
background-color: rgba(255, 255, 255, 0);
font: 700 12pt "Microsoft YaHei UI";
color: red;
"""
self.active_btn_sign_Qss = """
background-color: rgb(255, 0, 0);
font: 9pt "楷体";
border: 1px solid #dcdfe6;
border-radius: 5px;
"""
self.noactive_label_sign_Qss = """
background-color: rgba(255, 255, 255, 0);
font: 700 12pt "Microsoft YaHei UI";
color: #7A7A7A;
"""
self.noactive_btn_sign_Qss = """
background-color: #7A7A7A;
font: 9pt "楷体";
border: 1px solid #dcdfe6;
border-radius: 5px;
"""
pass
def init_log(self):
log.init_log(self.textEdit_log_info, self.textEdit_log_error, Constant.log_file_path)
@ -334,9 +284,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
solenoid_valve1_addr = int(self.configReader.get('Robot_Feed', 'solenoid_valve1_addr'))
solenoid_valve2_addr = int(self.configReader.get('Robot_Feed', 'solenoid_valve2_addr'))
solenoid_valve3_addr = int(self.configReader.get('Robot_Feed', 'solenoid_valve3_addr'))
time_delay_take = int(self.configReader.get('Robot_Feed', 'takeDelay'))
time_delay_put = int(self.configReader.get('Robot_Feed', 'putDelay'))
time_delay_shake = int(self.configReader.get('Robot_Feed', 'shakeDelay'))
time_delay_take = float(self.configReader.get('Robot_Feed', 'takeDelay'))
time_delay_put = float(self.configReader.get('Robot_Feed', 'putDelay'))
time_delay_shake = float(self.configReader.get('Robot_Feed', 'shakeDelay'))
#TODO
#dropDelay_time = int(self.configReader.get('Robot_Feed', 'dropDelay_time'))
self.robotClient = RobotClient(ip, port, photo_locs, self.command_position_quene, self.status_address,[solenoid_valve1_addr, solenoid_valve2_addr, solenoid_valve3_addr],time_delay_take,time_delay_put,time_delay_shake)
@ -562,7 +512,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.main_UI_threading = Thread(target=self.updateUI)
self.main_UI_threading.start()
self.check_continue()
pass
def check_continue(self):
if self.remain_Count!=0:
@ -576,6 +526,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
remain_messageBox.setStandardButtons(QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel)
result = remain_messageBox.exec()
if result == QMessageBox.StandardButton.Cancel:
self.remain_Count = 0
return
self.configReader.read(Constant.feedLine_set_file, encoding='utf-8')
line_name = self.configReader.get(key, 'name')
@ -636,6 +587,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.command_quene.put(FeedCommand(FeedingConfig(num, self.feedLine_dict[line_head], self.feeding.robotClient.photo_locs[:])))
self.stackedWidget_num.setCurrentIndex(1)
self.set_run_status_button(True)
self.feeding.pause = False
log.log_message(logging.INFO, f'{self.feedLine_dict[line_head].name}:{Constant.str_feed_start}')
def send_num_button_click(self):
@ -724,6 +676,8 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.label_maxNum.setText(str(max_num))
def send_custom_num_returnPressed(self):
if self.lineEdit_num.text()== '' or not self.lineEdit_num.text().isdigit():
return
self.horizontalSlider_feedingNum.setMaximum(int(self.lineEdit_num.text()))
self.horizontalSlider_feedingNum.setValue(0)
self.label_maxNum.setText(self.lineEdit_num.text())
@ -761,9 +715,9 @@ class MainWindow(QMainWindow, Ui_MainWindow):
solenoid1_addr = int(self.lineEdit_solenoid1_addr.text())
solenoid2_addr = int(self.lineEdit_solenoid2_addr.text())
solenoid3_addr = int(self.lineEdit_solenoid3_addr.text())
time_delay_take = int(self.lineEdit_timedelay_take.text())
time_delay_put = int(self.lineEdit_timedelay_put.text())
time_delay_shake = int(self.lineEdit_timedelay_shake.text())
time_delay_take = float(self.lineEdit_timedelay_take.text())
time_delay_put = float(self.lineEdit_timedelay_put.text())
time_delay_shake = float(self.lineEdit_timedelay_shake.text())
self.robotClient.con_ios[0] = solenoid1_addr
self.robotClient.con_ios[1] = solenoid2_addr
self.robotClient.con_ios[2] = solenoid3_addr
@ -882,6 +836,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.feeding.feedStatus = FeedStatus.FNone
# 清空运行命令
self.send_clear_auto_command()
self.feeding.feedConfig.num = 0
log.log_message(logging.INFO, Constant.str_feed_stop)
def send_pauseFeed_button_click(self):
@ -1077,6 +1032,7 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.label_status_remoteCmdLen.setText(str(self.robotClient.status_model.RemoteCmdLen))
if self.robotClient.status_model.curAlarm != 0:
log.log_message(logging.ERROR, Constant.str_sys_log_alarm_error+str(self.robotClient.status_model.curAlarm))
self.feeding.pause = True
self.label_status_alarmcode.setText(str(self.robotClient.status_model.curAlarm))
self.label_status_toolIndex.setText(str(self.robotClient.status_model.toolCoord))
self.label_status_speed.setText(str(self.robotClient.status_model.curSpeed_n))
@ -1153,34 +1109,33 @@ class MainWindow(QMainWindow, Ui_MainWindow):
def set_label_status_style(self, connected: bool):
if connected:
if self.label_connect_status.styleSheet().strip() != self.active_status_Qss:
self.label_connect_status.setStyleSheet(self.active_status_Qss)
self.active_status_Qss = self.label_connect_status.styleSheet().strip()
else:
if self.label_connect_status.styleSheet().strip() != self.noActive_status_Qss:
self.label_connect_status.setStyleSheet(self.noActive_status_Qss)
self.noActive_status_Qss = self.label_connect_status.styleSheet().strip()
#return
if connected and not self.label_connect_status.isEnabled():
self.label_connect_status.setEnabled(True)
if not connected and self.label_connect_status.isEnabled():
self.label_connect_status.setDisabled(True)
def set_sign_status(self,label,btn,signed:bool):
#return
try :
if signed:
if label.styleSheet().strip() != self.active_label_sign_Qss:
label.setStyleSheet(self.active_label_sign_Qss)
self.active_label_sign_Qss = label.styleSheet().strip()
if btn.styleSheet().strip() != self.active_btn_sign_Qss:
btn.setStyleSheet(self.active_btn_sign_Qss)
self.active_btn_sign_Qss = btn.styleSheet().strip()
else:
if label.styleSheet().strip() != self.noactive_label_sign_Qss:
label.setStyleSheet(self.noactive_label_sign_Qss)
self.noactive_label_sign_Qss = label.styleSheet().strip()
if btn.styleSheet().strip() != self.noactive_btn_sign_Qss:
btn.setStyleSheet(self.noactive_btn_sign_Qss)
self.noactive_btn_sign_Qss = btn.styleSheet().strip()
if signed and label.isEnabled():
label.setDisabled(True)
btn.setDisabled(True)
# if label.styleSheet().strip() != self.active_label_sign_Qss:
# label.setStyleSheet(self.active_label_sign_Qss)
# self.active_label_sign_Qss = label.styleSheet().strip()
#
# if btn.styleSheet().strip() != self.active_btn_sign_Qss:
# btn.setStyleSheet(self.active_btn_sign_Qss)
# self.active_btn_sign_Qss = btn.styleSheet().strip()
if not signed and not label.isEnabled():
label.setEnabled(True)
btn.setEnabled(True)
# if label.styleSheet().strip() != self.noactive_label_sign_Qss:
# label.setStyleSheet(self.noactive_label_sign_Qss)
# self.noactive_label_sign_Qss = label.styleSheet().strip()
# if btn.styleSheet().strip() != self.noactive_btn_sign_Qss:
# btn.setStyleSheet(self.noactive_btn_sign_Qss)
# self.noactive_btn_sign_Qss = btn.styleSheet().strip()
except Exception as e:
print(e)
@ -1530,6 +1485,11 @@ class MainWindow(QMainWindow, Ui_MainWindow):
self.feeding.sendIOControl(index-1, 0)
log.log_message(logging.INFO, f'关闭IO{index}')
def showEvent(self, event):
super().showEvent(event)
QTimer.singleShot(2000, self.check_continue)
def closeEvent(self, event):
self.record_remain_num()
self.detection.release()
@ -1548,10 +1508,32 @@ class MainWindow(QMainWindow, Ui_MainWindow):
except:
log.log_message(logging.ERROR, Constant.str_sys_log_feedNum)
class MyApplication(QApplication):
def __init__(self, argv):
super().__init__(argv)
def notify(self, receiver, event):
try:
return super().notify(receiver, event)
except Exception as e:
log.log_message(logging.ERROR, e)
# 可以在这里记录日志或者执行其他操作
return False
def handle_exception(exc_type, exc_value, exc_tb):
if issubclass(exc_type, KeyboardInterrupt):
log.log_message(logging.INFO, "用户主动退出程序")
return
log.log_message(logging.ERROR, exc_value)
print("未处理的异常:", exc_type, exc_value)
traceback.print_exception(exc_type, exc_value, exc_tb)
if __name__ == "__main__":
app = QApplication(sys.argv)
app = MyApplication(sys.argv)
window = MainWindow()
window.show()
sys.excepthook = handle_exception # 你的 PySide 应用程序代码 pass
sys.exit(app.exec())

View File

@ -616,7 +616,7 @@ class Ui_MainWindow(object):
"border: 1px solid #dcdfe6;\n"
"border-radius: 5px;\n"
"}\n"
"*:pressed\n"
"*:disabled\n"
"{\n"
"background-color: #ff6e00;\n"
"}\n"
@ -629,9 +629,18 @@ class Ui_MainWindow(object):
self.label_sign_go.setObjectName(u"label_sign_go")
sizePolicy1.setHeightForWidth(self.label_sign_go.sizePolicy().hasHeightForWidth())
self.label_sign_go.setSizePolicy(sizePolicy1)
self.label_sign_go.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n"
self.label_sign_go.setStyleSheet(u"\n"
"QLabel:disabled{\n"
" background-color: rgba(255, 255, 255, 0);\n"
" font: 700 12pt \"Microsoft YaHei UI\";\n"
" color: red;\n"
"}\n"
"\n"
"QLabel{\n"
"background-color: rgba(255, 255, 255, 0);\n"
"font: 700 12pt \"Microsoft YaHei UI\";\n"
"color:#7A7A7A;")
"color:#7A7A7A;\n"
"}")
self.label_sign_go.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
self.gridLayout_4.addWidget(self.label_sign_go, 0, 1, 1, 1)
@ -641,12 +650,12 @@ class Ui_MainWindow(object):
sizePolicy1.setHeightForWidth(self.pushButton_sign_photo.sizePolicy().hasHeightForWidth())
self.pushButton_sign_photo.setSizePolicy(sizePolicy1)
self.pushButton_sign_photo.setStyleSheet(u"*{\n"
"background-color: rgb(255, 0, 0);\n"
"background-color: #7A7A7A;\n"
"font: 9pt \"\u6977\u4f53\";\n"
"border: 1px solid #dcdfe6;\n"
"border-radius: 5px;\n"
"}\n"
"*:pressed\n"
"*:disabled\n"
"{\n"
"background-color: #ff6e00;\n"
"}\n"
@ -659,9 +668,18 @@ class Ui_MainWindow(object):
self.label_sign_photo.setObjectName(u"label_sign_photo")
sizePolicy1.setHeightForWidth(self.label_sign_photo.sizePolicy().hasHeightForWidth())
self.label_sign_photo.setSizePolicy(sizePolicy1)
self.label_sign_photo.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n"
self.label_sign_photo.setStyleSheet(u"\n"
"QLabel:disabled{\n"
" background-color: rgba(255, 255, 255, 0);\n"
" font: 700 12pt \"Microsoft YaHei UI\";\n"
" color: red;\n"
"}\n"
"\n"
"QLabel{\n"
"background-color: rgba(255, 255, 255, 0);\n"
"font: 700 12pt \"Microsoft YaHei UI\";\n"
"color: red;")
"color:#7A7A7A;\n"
"}")
self.label_sign_photo.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
self.gridLayout_4.addWidget(self.label_sign_photo, 0, 3, 1, 1)
@ -671,12 +689,12 @@ class Ui_MainWindow(object):
sizePolicy1.setHeightForWidth(self.pushButton_sign_take.sizePolicy().hasHeightForWidth())
self.pushButton_sign_take.setSizePolicy(sizePolicy1)
self.pushButton_sign_take.setStyleSheet(u"*{\n"
"background-color: rgb(255, 0, 0);\n"
"background-color: #7A7A7A;\n"
"font: 9pt \"\u6977\u4f53\";\n"
"border: 1px solid #dcdfe6;\n"
"border-radius: 5px;\n"
"}\n"
"*:pressed\n"
"*:disabled\n"
"{\n"
"background-color: #ff6e00;\n"
"}\n"
@ -689,9 +707,18 @@ class Ui_MainWindow(object):
self.label_sign_take.setObjectName(u"label_sign_take")
sizePolicy1.setHeightForWidth(self.label_sign_take.sizePolicy().hasHeightForWidth())
self.label_sign_take.setSizePolicy(sizePolicy1)
self.label_sign_take.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n"
self.label_sign_take.setStyleSheet(u"\n"
"QLabel:disabled{\n"
" background-color: rgba(255, 255, 255, 0);\n"
" font: 700 12pt \"Microsoft YaHei UI\";\n"
" color: red;\n"
"}\n"
"\n"
"QLabel{\n"
"background-color: rgba(255, 255, 255, 0);\n"
"font: 700 12pt \"Microsoft YaHei UI\";\n"
"color: black;")
"color:#7A7A7A;\n"
"}")
self.label_sign_take.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
self.gridLayout_4.addWidget(self.label_sign_take, 0, 5, 1, 1)
@ -701,12 +728,12 @@ class Ui_MainWindow(object):
sizePolicy1.setHeightForWidth(self.pushButton_sign_feed.sizePolicy().hasHeightForWidth())
self.pushButton_sign_feed.setSizePolicy(sizePolicy1)
self.pushButton_sign_feed.setStyleSheet(u"*{\n"
"background-color: rgb(255, 0, 0);\n"
"background-color: #7A7A7A;\n"
"font: 9pt \"\u6977\u4f53\";\n"
"border: 1px solid #dcdfe6;\n"
"border-radius: 5px;\n"
"}\n"
"*:pressed\n"
"*:disabled\n"
"{\n"
"background-color: #ff6e00;\n"
"}\n"
@ -719,9 +746,18 @@ class Ui_MainWindow(object):
self.label_sign_feed.setObjectName(u"label_sign_feed")
sizePolicy1.setHeightForWidth(self.label_sign_feed.sizePolicy().hasHeightForWidth())
self.label_sign_feed.setSizePolicy(sizePolicy1)
self.label_sign_feed.setStyleSheet(u"background-color: rgba(255, 255, 255, 0);\n"
self.label_sign_feed.setStyleSheet(u"\n"
"QLabel:disabled{\n"
" background-color: rgba(255, 255, 255, 0);\n"
" font: 700 12pt \"Microsoft YaHei UI\";\n"
" color: red;\n"
"}\n"
"\n"
"QLabel{\n"
"background-color: rgba(255, 255, 255, 0);\n"
"font: 700 12pt \"Microsoft YaHei UI\";\n"
"color: black;")
"color:#7A7A7A;\n"
"}")
self.label_sign_feed.setAlignment(Qt.AlignmentFlag.AlignLeading|Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter)
self.gridLayout_4.addWidget(self.label_sign_feed, 0, 7, 1, 1)
@ -871,6 +907,13 @@ class Ui_MainWindow(object):
" border: 1px solid #A2EF4D; /* \u8bbe\u7f6e\u8fb9\u6846\u989c\u8272\u548c\u5bbd\u5ea6 */\n"
" qproperty-alignment: 'AlignCenter'; /* \u8bbe\u7f6e\u6587\u672c\u5c45\u4e2d */\n"
"}\n"
"QLabel:disabled{\n"
" background-color: #FD3251; \n"
" color: #ffffff; \n"
" border-radius: 8px; \n"
" border: 1px solid #FD3251; \n"
" qproperty-alignment: 'AlignCenter'; \n"
"}\n"
"")
self.gridLayout_3.addWidget(self.label_connect_status, 0, 1, 1, 1)
@ -3176,7 +3219,9 @@ class Ui_MainWindow(object):
self.lineEdit_num.setObjectName(u"lineEdit_num")
sizePolicy1.setHeightForWidth(self.lineEdit_num.sizePolicy().hasHeightForWidth())
self.lineEdit_num.setSizePolicy(sizePolicy1)
self.lineEdit_num.setStyleSheet(u"color: rgb(255, 255, 255);")
self.lineEdit_num.setStyleSheet(u"color: rgb(255, 255, 255);\n"
"border: 1px solid #dcdfe6;\n"
"font: 8pt \"Microsoft YaHei UI\";")
self.gridLayout.addWidget(self.lineEdit_num, 2, 0, 1, 1)
@ -3743,6 +3788,7 @@ class Ui_MainWindow(object):
self.pushButton_num4.setText(QCoreApplication.translate("MainWindow", u"40", None))
self.pushButton_num5.setText(QCoreApplication.translate("MainWindow", u"50", None))
self.pushButton_num6.setText(QCoreApplication.translate("MainWindow", u"60", None))
self.lineEdit_num.setPlaceholderText(QCoreApplication.translate("MainWindow", u"\u81ea\u5b9a\u4e49\u6570\u91cf", None))
self.pushButton_num_confirm.setText(QCoreApplication.translate("MainWindow", u"\u786e\u5b9a", None))
self.pushButton_AddNum.setText(QCoreApplication.translate("MainWindow", u"\u8865\u4e00\u888b", None))
self.pushButton_SubNum.setText(QCoreApplication.translate("MainWindow", u"\u6263\u4e00\u888b", None))