from common import * from PySide6.QtWidgets import ( QApplication, QWidget, QFormLayout, QHBoxLayout, QVBoxLayout, QLabel, QSpacerItem, QSizePolicy, ) from PySide6.QtCore import Qt from qfluentwidgets import LineEdit, PushButton, StrongBodyLabel class WeightControlUI(QWidget): def __init__(self, parent=None): super().__init__(parent) # ========== 1. 窗口基础设置 ========== self.setWindowTitle("计量一体机调试") self.resize(800, 600) # 窗口大小 self.setStyleSheet("background-color: white;") # 背景颜色,根据主题来变化 self.__initWidget() def __initWidget(self): # 创建控件 self.__createWidget() # 设置样式 self.__initStyles() # 设置布局 self.__initLayout() def __createWidget(self): # ========== 创建表单控件 ========== # 右侧编辑栏 self.target_weight_edit = LineEdit() self.target_weight_edit.setPlaceholderText("目标重量") self.current_weight_edit = LineEdit() self.current_weight_edit.setPlaceholderText("当前重量") self.current_weight_edit.setReadOnly(True) # 只读 self.error_edit = LineEdit() self.error_edit.setPlaceholderText("误差") self.error_edit.setReadOnly(True) # 只读 # ========== 按钮 ========== self.calibrate_btn = PushButton("重量标定") self.confirm_btn = PushButton("确认") self.compensate_btn = PushButton("补称") self.motor_forward_btn = PushButton("电机正转") self.motor_reverse_btn = PushButton("电机反转") def __initStyles(self): # 设置按钮大小 # 固定大小为 160x46 for btn in [ self.calibrate_btn, self.confirm_btn, self.compensate_btn, self.motor_forward_btn, self.motor_reverse_btn, ]: btn.setFixedSize(160, 46) # 固定按钮尺寸 def __initLayout(self): # ========== 布局设计 ========== # 表单布局(标签+输入框,右对齐) form_layout = QFormLayout() form_layout.addRow(StrongBodyLabel("目标重量:"), self.target_weight_edit) form_layout.addRow(StrongBodyLabel("当前重量:"), self.current_weight_edit) form_layout.addRow(StrongBodyLabel("误差:"), self.error_edit) form_layout.setRowWrapPolicy(QFormLayout.DontWrapRows) # 禁止换行 form_layout.setVerticalSpacing(20) # 行间距 form_layout.setLabelAlignment(Qt.AlignLeft | Qt.AlignVCenter) # 标签左对齐 # 用QHBoxLayout 包裹 form_layout,两侧加弹簧 form_horizontal_layout = QHBoxLayout() # 左侧弹簧:占据左边多余空间 form_horizontal_layout.addItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) ) # 添加表单布局 form_horizontal_layout.addLayout(form_layout) # 右侧弹簧:占据右边多余空间 form_horizontal_layout.addItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) ) # 按钮布局(第一行:重量标定 + 确认;第二行:补称 + 电机正转 + 电机反转) # 第一行按钮布局(中间留空,让按钮居中) btn_row1_layout = QHBoxLayout() btn_row1_layout.addSpacerItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) ) btn_row1_layout.addWidget(self.calibrate_btn) btn_row1_layout.addSpacerItem( QSpacerItem(160, 0, QSizePolicy.Fixed, QSizePolicy.Minimum) ) # 两个按钮之间的间距为160 btn_row1_layout.addWidget(self.confirm_btn) btn_row1_layout.addSpacerItem( QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) ) # 第二行按钮布局(均匀分布) btn_row2_layout = QHBoxLayout() btn_row2_layout.addWidget(self.compensate_btn) btn_row2_layout.addSpacerItem( QSpacerItem(60, 0, QSizePolicy.Fixed, QSizePolicy.Minimum) ) btn_row2_layout.addWidget(self.motor_forward_btn) btn_row2_layout.addSpacerItem( QSpacerItem(60, 0, QSizePolicy.Fixed, QSizePolicy.Minimum) ) btn_row2_layout.addWidget(self.motor_reverse_btn) btn_row2_layout.setContentsMargins(0, 0, 0, 0) # 清除边距 # 主布局(垂直排列:表单 + 按钮行1 + 按钮行2) main_layout = QVBoxLayout(self) main_layout.addLayout(form_horizontal_layout) main_layout.addSpacing(40) # 表单与按钮的间距 main_layout.addLayout(btn_row1_layout) main_layout.addSpacing(30) # 两行按钮的间距 main_layout.addLayout(btn_row2_layout) main_layout.setContentsMargins(80, 60, 80, 60) # 窗口内边距 # main_layout.setAlignment(Qt.AlignTop | Qt.AlignHCenter) # 整体上对齐,水平居中 main_layout.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter) # 垂直、水平居中 if __name__ == "__main__": import sys app = QApplication(sys.argv) # 设置qfluentwidgets全局主题(如浅色主题) from qfluentwidgets import setTheme, Theme setTheme(Theme.LIGHT) window = WeightControlUI() window.show() sys.exit(app.exec())