from PySide6.QtWidgets import (QWidget, QHBoxLayout, QPushButton, QLineEdit, QApplication) from PySide6.QtCore import Qt from PySide6.QtGui import QDoubleValidator import sys """ 调整计划方量, 左侧减按钮, 右侧加按钮 这里的 最小值、最大值、初始值 需要读取配置文件来决定 """ class CustomLineEdit(QLineEdit): def __init__(self, default_text: str, parent=None): super().__init__(parent) self.default_text = default_text # 保存初始化时的默认文本 self.setText(self.default_text) # 初始化为默认文本 def focusOutEvent(self, event): super().focusOutEvent(event) # 先执行父类的焦点离开逻辑 # 检查文本是否为空(或仅含空格) current_text = self.text().strip() if not current_text: self.setText(self.default_text) # 为空则恢复默认值 else: # 不为空,显示一位小数 value = round(float(current_text), 1) self.setText(f"{value:.1f}") self.setCursorPosition(0) # 光标移到最前面 (保证数值显示完整) class ValueAdjuster(QWidget): def __init__(self, parent=None): super().__init__(parent) self.min_value = 0.0 # 最小值 self.max_value = 99.0 # 最大值 self.value = 2.5 # 初始值 (需要显示一位数字) self.setFixedSize(102, 32) # 创建控件 # 减号按钮 self.minus_btn = QPushButton("-") self.minus_btn.setFixedSize(26, 26) self.minus_btn.setCursor(Qt.PointingHandCursor) # 中间的编辑栏 # 支持显示两位小数 # self.line_edit = QLineEdit(f"{self.value:.1f}") # 显示1位小数 self.line_edit = CustomLineEdit(f"{self.value:.1f}") # 显示1位小数 self.line_edit.setFixedSize(40, 26) # 加号按钮 self.plus_btn = QPushButton("+") self.plus_btn.setFixedSize(26, 26) self.plus_btn.setCursor(Qt.PointingHandCursor) # 配置QLineEdit:支持数字输入+居中显示 self.line_edit.setAlignment(Qt.AlignCenter) # 文本居中 # 限制输入为浮点数(范围可自定义) self.line_edit.setValidator(QDoubleValidator(self.min_value, self.max_value, 1, self)) # 最多1位小数 (必选) self.line_edit.textChanged.connect(self.on_text_changed) # 监听输入变化 # 设置样式表(保持与按钮风格统一) self.minus_btn.setStyleSheet(""" QPushButton { background-color: #001c83; color: #03f5ff; border: 1px solid #039ec3; font-size: 29px; text-align: center; padding-bottom: 4px; } QPushButton:hover { background-color: #16ffff; color: #00347e; } """) # #03f5ff self.line_edit.setStyleSheet(""" QLineEdit { background-color: #001c83; color: white; border: 1px solid #039ec3; font-size: 16px; padding:0px; font-weight: 560; } QLineEdit:focus { border: 1px solid #039ec3; outline: none; } """) self.plus_btn.setStyleSheet(""" QPushButton { background-color: #001c83; color: #03f5ff; border: 1px solid #039ec3; font-size: 29px; text-align: center; padding-bottom: 4px; margin: 0px; } QPushButton:hover { background-color: #16ffff; color: #00347e; } """) # 连接信号槽(加减按钮) self.minus_btn.clicked.connect(self.on_minus_clicked) self.plus_btn.clicked.connect(self.on_plus_clicked) # 设置布局(间距0,确保边框无缝衔接) layout = QHBoxLayout(self) layout.setSpacing(2) layout.setContentsMargins(0, 0, 0, 0) # 去除布局外边距 layout.addWidget(self.minus_btn) layout.addWidget(self.line_edit) layout.addWidget(self.plus_btn) def on_minus_clicked(self): """减0.1""" new_value = self.value - 0.1 # 限制最小值:不低于min_value if new_value >= self.min_value: self.value = round(new_value, 1) self.line_edit.setText(f"{self.value:.1f}") def on_plus_clicked(self): """加0.1""" new_value = self.value + 0.1 # 限制最大值:不超过max_value if new_value <= self.max_value: self.value = round(new_value, 1) self.line_edit.setText(f"{self.value:.1f}") def on_text_changed(self, text): """监听输入框文本变化, 更新内部value""" if not text: return try: input_value = round(float(text), 1) # 确保输入值在范围内 if self.min_value <= input_value <= self.max_value: self.value = input_value else: # 超出范围时恢复到最近的有效 value self.line_edit.setText(f"{self.value:.1f}") except ValueError: pass # 获取具体的方量数值,float类型 (一位小数) def get_value(self): return self.value # 设置方量值 def set_value(self, value:float): input_value = round(float(value), 1) # 确保设置的值在范围内 if self.min_value <= input_value <= self.max_value: self.value = input_value self.line_edit.setText(f"{self.value:.1f}") # 更新方量值 if __name__ == "__main__": app = QApplication(sys.argv) widget = ValueAdjuster() widget.show() sys.exit(app.exec())