add(更新opcua客户端、振捣频率按钮、管片任务数据刷新)
This commit is contained in:
@ -249,7 +249,15 @@ class ArcProgressWidget(QWidget):
|
||||
Args:
|
||||
progress: 传入去掉百分号之后的数值, 如80%, 传入80
|
||||
"""
|
||||
self.arc_progress.progress = progress
|
||||
try:
|
||||
if isinstance(progress, str):
|
||||
progress = progress.strip().replace("%", "")
|
||||
progress_int = int(float(progress))
|
||||
progress_int = max(0, min(100, progress_int))
|
||||
self.arc_progress.progress = progress_int
|
||||
except (ValueError, TypeError):
|
||||
pass # 传入的生产进度类型错误,维持原进度
|
||||
|
||||
|
||||
# 重量设置 (单位kg)
|
||||
def setWeight(self, weight:float):
|
||||
|
||||
@ -60,6 +60,8 @@ class ConveyorSystemWidget(QWidget):
|
||||
if outer_pixmap.isNull():
|
||||
print(f"警告:图片 {outer_img} 加载失败,请检查路径!")
|
||||
return group
|
||||
outer_width = outer_pixmap.width()
|
||||
outer_height = outer_pixmap.height()
|
||||
|
||||
group.setFixedSize(outer_pixmap.size()) # 设置尺寸, 大小和外框一样
|
||||
|
||||
@ -85,6 +87,14 @@ class ConveyorSystemWidget(QWidget):
|
||||
self.upper_inner_label.move(14, 9)
|
||||
self.upper_inner_label.setAlignment(Qt.AlignBottom)
|
||||
|
||||
# 重量文字(上位)
|
||||
self.upper_weight_label = QLabel("5000kg", upper_bg_widget)
|
||||
self.upper_weight_label.setAlignment(Qt.AlignCenter)
|
||||
self.upper_weight_label.setStyleSheet("background: none; background-color: #003669; color: #16ffff; font-size: 18px;")
|
||||
# self.upper_weight_label.setFixedSize(93, 22)
|
||||
self.upper_weight_label.setFixedSize(120, 29)
|
||||
self.upper_weight_label.move(outer_width//2 - 60, outer_height//2 - 46)
|
||||
|
||||
return group
|
||||
|
||||
def _update_upper_inner_height(self, total_weight, current_weight: float):
|
||||
@ -123,6 +133,9 @@ class ConveyorSystemWidget(QWidget):
|
||||
# 2、将self._last_upper_hopper_weight设置为当前重量
|
||||
self._last_upper_hopper_weight = weight
|
||||
|
||||
# 3、更新重量显示文字
|
||||
self.upper_weight_label.setText(f"{weight}kg")
|
||||
|
||||
def create_conveyor(self):
|
||||
"""创建传送带组件(包含左右齿轮,group容器背景为传送带图片)"""
|
||||
group = QWidget()
|
||||
|
||||
150
view/widgets/frequency_button_group.py
Normal file
150
view/widgets/frequency_button_group.py
Normal file
@ -0,0 +1,150 @@
|
||||
from PySide6.QtWidgets import (QWidget, QPushButton, QVBoxLayout,
|
||||
QSizePolicy)
|
||||
from PySide6.QtCore import Signal, Qt, QObject
|
||||
from PySide6.QtGui import QFont
|
||||
|
||||
class FrequencyButtonGroup(QWidget):
|
||||
"""振捣频率选择按钮组"""
|
||||
# 该信号frequency_changed,用于振捣频率的控制逻辑,表示需要按照int类型的频率开始振捣
|
||||
frequency_changed = Signal(int) # 选中切换信号(新选中频率)
|
||||
|
||||
# 该信号frequency_cleared,用于停止振捣
|
||||
frequency_cleared = Signal() # 取消选中信号(无参数)
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setFixedSize(115, 159)
|
||||
self._init_ui()
|
||||
self._selected_freq = None # 当前选中的频率(None表示未选中)
|
||||
|
||||
|
||||
def _init_ui(self):
|
||||
"""初始化UI:垂直排列3个按钮, 设置样式和交互"""
|
||||
# 1. 布局:垂直排列,间隔16px
|
||||
self.layout = QVBoxLayout(self)
|
||||
self.layout.setSpacing(16) # 按钮间间隔16px
|
||||
self.layout.setContentsMargins(0, 0, 0, 0) # 去除外层边距
|
||||
self.layout.setAlignment(Qt.AlignCenter) # 按钮垂直居中
|
||||
|
||||
# 2. 按钮配置:频率列表、样式
|
||||
self.freq_buttons = {} # 存储按钮映射:{频率值: 按钮实例}
|
||||
freq_list = [220, 230, 240] # 频率设置,设置三个频率
|
||||
font = QFont()
|
||||
font.setPointSize(15) # 字体大小15px
|
||||
|
||||
for freq in freq_list:
|
||||
btn = QPushButton(f"{freq}Hz", self)
|
||||
btn.setFont(font)
|
||||
btn.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) # 固定尺寸
|
||||
btn.setFixedSize(96, 36) # 按钮固定大小(匹配背景图尺寸)
|
||||
btn.setCursor(Qt.PointingHandCursor)
|
||||
|
||||
# 3. 绑定点击事件
|
||||
btn.clicked.connect(lambda checked, target_freq=freq: self._on_btn_clicked(target_freq))
|
||||
|
||||
# 4. 设置默认样式(未选中状态)
|
||||
self._set_btn_style(btn, is_selected=False)
|
||||
|
||||
# 5. 添加到布局和映射表
|
||||
self.layout.addWidget(btn)
|
||||
self.freq_buttons[freq] = btn
|
||||
|
||||
# 6. 禁止布局拉伸(按钮垂直居中,不填充多余空间)
|
||||
self.layout.addStretch()
|
||||
|
||||
def _set_btn_style(self, btn, is_selected: bool):
|
||||
"""设置按钮样式"""
|
||||
if is_selected:
|
||||
btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
background-image: url(images/频率按钮2.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-origin: content-box;
|
||||
background-clip: content-box;
|
||||
color: #05267d;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
opacity: 0.95;
|
||||
background-image: url(images/频率按钮2.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-origin: content-box;
|
||||
background-clip: content-box;
|
||||
}
|
||||
""")
|
||||
else:
|
||||
btn.setStyleSheet("""
|
||||
QPushButton {
|
||||
background-image: url(images/频率按钮1.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-origin: content-box;
|
||||
background-clip: content-box;
|
||||
color: #3bfff8;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
}
|
||||
QPushButton:hover {
|
||||
opacity: 0.95;
|
||||
background-image: url(images/频率按钮1.png);
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-origin: content-box;
|
||||
background-clip: content-box;
|
||||
}
|
||||
""")
|
||||
btn.repaint()
|
||||
|
||||
def _on_btn_clicked(self, target_freq):
|
||||
"""按钮点击事件:支持切换选中/取消选中"""
|
||||
if target_freq == self._selected_freq:
|
||||
self.clear_selection()
|
||||
self.frequency_cleared.emit()
|
||||
return
|
||||
|
||||
if self._selected_freq is not None:
|
||||
prev_btn = self.freq_buttons[self._selected_freq]
|
||||
self._set_btn_style(prev_btn, is_selected=False)
|
||||
|
||||
current_btn = self.freq_buttons[target_freq]
|
||||
self._set_btn_style(current_btn, is_selected=True)
|
||||
self._selected_freq = target_freq
|
||||
self.frequency_changed.emit(target_freq)
|
||||
|
||||
def _set_frequency_show(self, target_freq:int):
|
||||
"""设置振捣频率, 只修改显示, 不控制变频器"""
|
||||
if self._selected_freq is not None:
|
||||
prev_btn = self.freq_buttons[self._selected_freq]
|
||||
self._set_btn_style(prev_btn, is_selected=False)
|
||||
|
||||
current_btn = self.freq_buttons[target_freq]
|
||||
self._set_btn_style(current_btn, is_selected=True)
|
||||
self._selected_freq = target_freq
|
||||
|
||||
# ------------------- 外部接口 -------------------
|
||||
def set_selected_frequency(self, freq: int):
|
||||
""" 设置显示选中的频率, 只显示不控制 """
|
||||
try:
|
||||
freq_int = int(freq)
|
||||
if freq_int not in self.freq_buttons:
|
||||
# 除了220、230、240,其他的数值(比如:0)都表示取消显示的频率
|
||||
self.clear_selection()
|
||||
return
|
||||
self._set_frequency_show(freq_int)
|
||||
except (ValueError, TypeError):
|
||||
pass # 传入的振捣频率类型错误,维持原频率
|
||||
|
||||
|
||||
def get_selected_frequency(self):
|
||||
"""获取当前选中的频率(外部接口),没有选中返回None"""
|
||||
return self._selected_freq
|
||||
|
||||
def clear_selection(self):
|
||||
"""清除所有选中状态(内部调用+外部接口)"""
|
||||
if self._selected_freq is not None:
|
||||
prev_btn = self.freq_buttons[self._selected_freq]
|
||||
self._set_btn_style(prev_btn, is_selected=False)
|
||||
self._selected_freq = None
|
||||
@ -176,13 +176,21 @@ class ProductionProgressWidget(QWidget):
|
||||
self.animation.setEndValue(100)
|
||||
self.animation.start()
|
||||
|
||||
def setProgress(self, progress: float):
|
||||
def setProgress(self, progress: int):
|
||||
"""
|
||||
设置progress之后, 会根据该值调整进度条
|
||||
Args:
|
||||
progress: 传入去掉百分号之后的数值, 如80%, 传入80.0
|
||||
progress: 传入去掉百分号之后的数值, 如80%, 传入80
|
||||
"""
|
||||
self.linear_progress.progress = progress
|
||||
try:
|
||||
if isinstance(progress, str):
|
||||
progress = progress.strip().replace("%", "")
|
||||
progress_int = int(float(progress))
|
||||
progress_int = max(0, min(100, progress_int))
|
||||
self.linear_progress.progress = progress_int
|
||||
except (ValueError, TypeError):
|
||||
pass # 生产进度更新失败,维持原进度
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@ -257,9 +257,9 @@ class SegmentDetailsDialog(QDialog):
|
||||
row: 左列网格行号(0-6,共7行)
|
||||
new_label_text: 新的标签文字(如“管片编号”)
|
||||
"""
|
||||
if 0 <= row < len(self.left_cells):
|
||||
if new_label_text and 0 <= row < len(self.left_cells):
|
||||
cell = self.left_cells[row]
|
||||
cell.label.setText(new_label_text)
|
||||
cell.label.setText(str(new_label_text))
|
||||
|
||||
def set_left_value(self, row, new_value_text:str):
|
||||
"""
|
||||
@ -268,9 +268,9 @@ class SegmentDetailsDialog(QDialog):
|
||||
row: 左列网格行号(0-6,共7行)
|
||||
new_value_text: 新的值(如“FB789”)
|
||||
"""
|
||||
if 0 <= row < len(self.left_cells):
|
||||
if new_value_text and 0 <= row < len(self.left_cells):
|
||||
cell = self.left_cells[row]
|
||||
cell.value.setText(new_value_text)
|
||||
cell.value.setText(str(new_value_text))
|
||||
|
||||
def set_right_label(self, row, new_label_text:str):
|
||||
"""
|
||||
@ -279,9 +279,9 @@ class SegmentDetailsDialog(QDialog):
|
||||
row: 右列网格行号(0-6,共7行)
|
||||
new_label_text: 新的标签文字(如“分块号”)
|
||||
"""
|
||||
if 0 <= row < len(self.right_cells):
|
||||
if new_label_text and 0 <= row < len(self.right_cells):
|
||||
cell = self.right_cells[row]
|
||||
cell.label.setText(new_label_text)
|
||||
cell.label.setText(str(new_label_text))
|
||||
|
||||
def set_right_value(self, row, new_value_text:str):
|
||||
"""
|
||||
@ -290,9 +290,9 @@ class SegmentDetailsDialog(QDialog):
|
||||
row: 右列网格行号(0-6,共7行)
|
||||
new_value_text: 新的值(如“FB789”)
|
||||
"""
|
||||
if 0 <= row < len(self.left_cells):
|
||||
if new_value_text and 0 <= row < len(self.left_cells):
|
||||
cell = self.right_cells[row]
|
||||
cell.value.setText(new_value_text)
|
||||
cell.value.setText(str(new_value_text))
|
||||
|
||||
|
||||
# 测试代码
|
||||
|
||||
Reference in New Issue
Block a user