Files
fluent_widgets_pyside6/tests/test_weight.py

147 lines
5.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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())