147 lines
5.3 KiB
Python
147 lines
5.3 KiB
Python
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())
|